Ich verstehe nicht, was ich angeben soll



  • Also ich habe jetzt IUpdatable und IRenderable in eine eigene Klassen getan

    package de.rub;
    
    import gameCore.IRenderable;
    import gameCore.IUpdatable;
    import gameCore.Renderer;
    
    import java.awt.*;
    import java.awt.image.BufferedImage;
    
    import de.rub.Block;
    
    import javax.swing.*;
    
    public class World {
    
        public static IUpdatable upd(Block block) {
            IUpdatable upd = new IUpdatable() {
                @Override
                public void update(long elapsedMillis) {
                    System.out.println(rend(block));
                }
            };
            return upd;
        }
    
        public static IRenderable rend(Block block) {
            IRenderable rend = new IRenderable() {
                @Override
                public void render(Renderer renderer) {
                        Image player;
                        ImageIcon u2 = new ImageIcon("C:/Users/marti/IdeaProjects/Spieleprojekt/lib/Bilder/player.png");
                        player = u2.getImage();
                        BufferedImage bufferedImage = new BufferedImage(320, 320, BufferedImage.TYPE_INT_RGB);
                        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
                        g.drawImage(player, 120, 230, 50, 50, null);
    
                        renderer.drawImage((BufferedImage) player, 120, 230, 50, 50);
                }
            };
            return rend;
        }
    }
    

    Und die Klasse Game initialisiert in Main

            new Game("Game",340,340,50,World.upd(new Block().bufferedImage),60,World.rend(new Block()));
    

    Allerdings bekomme ich dann ein ganzen Haufen von Fehleranzeigen, wenn ich versuche das auzuführen

    de.rub.World$2@7d29c386
    de.rub.World$2@382b5247
    de.rub.World$2@4247cbac
    de.rub.World$2@9d9ae20
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class sun.awt.image.ToolkitImage cannot be cast to class java.awt.image.BufferedImage (sun.awt.image.ToolkitImage and java.awt.image.BufferedImage are in module java.desktop of loader 'bootstrap')
    	at de.rub.World$2.render(World.java:37)
    at gameCore.Game.paintComponent(Game.java:105)
    	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
    	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
    	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
    	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
    	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
    	at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
    	at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5262)
    	at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
    	at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
    	at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
    	at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
    	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
    	at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    	at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
    	at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
    	at java.desktop/java.awt.Container.paint(Container.java:2002)
    	at java.desktop/java.awt.Window.paint(Window.java:3928)
    	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
    	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
    	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
    	at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
    	at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    de.rub.World$2@3a5f696e
    

    Was habe ich falsch gemacht?



  • @Martin1809 sagte in Ich verstehe nicht, was ich angeben soll:

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: class sun.awt.image.ToolkitImage cannot be cast to class java.awt.image.BufferedImage (sun.awt.image.ToolkitImage and java.awt.image.BufferedImage are in module java.desktop of loader 'bootstrap')
    	at de.rub.World$2.render(World.java:37)
    

    Sieh' Dir die genannte Zeile (37 in World.java) an.



  • @Swordfish Weißt du wie ich das Problem lösen kann, den ich finde nichts im Internet


  • Mod

    @Martin1809 sagte in Ich verstehe nicht, was ich angeben soll:

    @Swordfish Weißt du wie ich das Problem lösen kann, den ich finde nichts im Internet

    Wirklich? Ich habe im Leben nie Java programmiert und habe keine 15 Sekunden gebraucht, zig Lösungen zu finden. Indem man einfach die Wörter googelt. Du hast einfach nur nichts gemacht. Wieso behauptest du dann etwas anderes?



  • Mit "Sieh dir ... an" kann im Zweifelsfall auch "Poste ... hier und wir erklären dir was da schief läuft" gemeint sein. Nur eins ist klar, ohne den Code an der Stelle zu kennen, kann hier wahrscheinlich niemand erraten, was du falsch machst.


  • Mod

    Er hat es gepostet, geht in dem Roman etwas unter:
    Zeile 37

    renderer.drawImage((BufferedImage) player, 120, 230, 50, 50);
    

    und Meldung

    class sun.awt.image.ToolkitImage cannot be cast to class java.awt.image.BufferedImage (sun.awt.image.ToolkitImage and java.awt.image.BufferedImage are in module java.desktop of loader 'bootstrap')
    	at de.rub.World$2.render(World.java:37)
    

    Google findet buchstäblich tausende Ergebnisse zur Konvertierung von ToolkitImage nach BufferedImage, selbst wenn man bloß die beiden Wörter sucht.



  • Ups. Ich hab sogar 2mal gesucht und es nicht gesehen 😕



  • Da doch schon im Code ein BufferedImage erzeugt wird (aus dem player-Image) ist die Lösung doch offensichlich: einfach diese Variable benutzen!



  • @Th69 Danke, so funktioniert es.



  • Ich habe ganz viele antworten mit TollkitImage gefunden, allerdings wird bei mir immer "Create Type parameter 'ToolkitImage' angezeigt und wenn ich 'java.awt.Toolkit' importiere, wird es immer noch so angezeigt.
    Bei manchen habe ich auch 'import java.awt.ToolkitImage' gesehen allerdings gibt es das bei mir nicht, weiß jemand wie so?



  • @Martin1809

    Ich kenne die Bib nur als sun.awt.image.ToolkitImage, gibts glaub ich aber in der open JDK nicht.


Anmelden zum Antworten