BufferedImage Exportieren Eclipse

Mr.Strobel

Mitglied
Hallo zusammen,
ich habe Bereits viel Beiträge zu diesem Thema gelesen, jedoch werde ich einfach nicht Schlau daraus.
Ich habe in meinen Programm eine eigene Klasse für alle Art Variablen ( Var() ) dort definiert ich auch BufferedImage s diese werden in einer andern Klasse Label() mit g.drawImage(...) gezeichnet. Wie auch die anderen habe ich auch das Problem das dies nach dem Exportieren nicht geladen werden. In der .Jar bzw in der .zip sind sie jedoch vorhanden.
Java:
public class Var{
    static BufferedImage iback;
    public Var(){
        //alle Möglichkeiten die ich Ausprobiert habe
        iback = ImageIO.read(new File("rsc/Back/back.png"));
        iback = ImageIO.read(getClass().getResource("/Back/back.png"));
        iback = ImageIO.read(getClass().getResourceAsStream("/Back/back.png"));
        
    }
}
Ich benutze Eclipse und habe die Dateien wie Folgt eingefügt:
unknown.png

in dem Oberen Beispiel habe ich den Ordner Back genannt, dies ist nur zur einfachhalber

Ich habe alle diese Varianten ausprobiert, keine davon wurde nach dem Export geladen.
Warum ? Hab ich was Falsch gemacht?
Ich habe auf die groß/klein Schreibung geachtet da ich gehört habe das man darauf achten soll.
Ich bin über jede Hilfe Dankbar, wenn ich euch helfen kann mit Screenshots oder ähnlichen stehe ich gerne zu Verfügung.
Lg
Ferdinand Strobel
 
K

kneitzel

Gast
Und du initialisiert die statische Variable im Konstruktor ... aber erstellst du überhaupt eine Instanz?
 

Mr.Strobel

Mitglied
Das ist eine schlechte Idee... Die Variablen sollten bei der Klasse sein, zu der sie gehören. Und auf static solltest du auch möglichst verzichten.

Back sehe ich in dem Screenshot gar nicht, liegt es nicht da?
Back war nur der Einfachkeit, damit ihr nicht solange Ordner paths dort stehen habt

Ich hab mir java selbst beigebracht deshalb wusste ich das mit dem Bufferedimage in der Klasse nicht, in welche soll es dann definiert werden im Label () wo es gezeichnet wird ?
Von der Klasse Var() rufe ich alles in den anderen Klassen auf also int, String, ... Wusste nicht das es ein Problem ist liegt es nur daran?
 
K

kneitzel

Gast
In welcher Klasse das am besten aufgehoben wäre, können wir Dir nicht sagen, da wir nicht wissen, was Du bisher wie geschrieben hast. Aber bei dem Ansatz ist es vermutlich so, dass Du bisher kein brauchbares Design hast.

Java ist objektorientiert, d.h. Du solltest immer in Objekten denken Und jedes Objekt hat gewisse Daten und ein gewisses Verhalten. Und darüber können sie miteinander agieren. Dabei ist wichtig: Wenn ein Objekt mit einem anderen interagieren soll, dann muss es das Objekt kennen. Das ist also wie im echten Leben:
Es nützt Dir nichts, wenn da eine Geldbörse erstellt wurde. Du musst da auch Zugriff drauf kriegen, damit Du damit was machen kannst.
 

Mr.Strobel

Mitglied
In welcher Klasse das am besten aufgehoben wäre, können wir Dir nicht sagen, da wir nicht wissen, was Du bisher wie geschrieben hast. Aber bei dem Ansatz ist es vermutlich so, dass Du bisher kein brauchbares Design hast.

Java ist objektorientiert, d.h. Du solltest immer in Objekten denken Und jedes Objekt hat gewisse Daten und ein gewisses Verhalten. Und darüber können sie miteinander agieren. Dabei ist wichtig: Wenn ein Objekt mit einem anderen interagieren soll, dann muss es das Objekt kennen. Das ist also wie im echten Leben:
Es nützt Dir nichts, wenn da eine Geldbörse erstellt wurde. Du musst da auch Zugriff drauf kriegen, damit Du damit was machen kannst.
Wie meinst du damit was machen?
Mein Programm ist etwas größer und Programm die ich vorher geschrieben habe warne auch ein bisschen größer also wie meinst du das ? Mit diesen Images passiert im Hintergrund noch Recht viel, also sie werden in ein Label gezeichnet oder auch verschoben und was hat das ganze mit dem Problem des exportieren zu tun ?
 

thecain

Top Contributor
Zeig doch mal den "richtigen" Code und wo er aufgerufen wird. Wenn der Path eventuell falsch ist, macht es nicht Sinn, wenn du den änderst für uns
 
K

kneitzel

Gast
Wie meinst du damit was machen?
Mein Programm ist etwas größer und Programm die ich vorher geschrieben habe warne auch ein bisschen größer also wie meinst du das ? Mit diesen Images passiert im Hintergrund noch Recht viel, also sie werden in ein Label gezeichnet oder auch verschoben und was hat das ganze mit dem Problem des exportieren zu tun ?
In dem Beispiel bedeutet "damit was machen" einfach, dass Du mit der Geldbörse alles machen kannst, was eben möglich ist. Geld rein tun, schauen, was drin ist, wegwerfen, verbrennen, .... Nur wenn Du keinen Zugriff auf die Geldbörse hast, dann kannst Du all das nicht machen.

Das ist bei Programmen auch nicht anders.

Ansonsten was das Laden angeht
Bezüglich des Ladens habe ich in #3 auf etwas hingewiesen, woran es aus meiner Sicht liegen könnte.

Eine Klasse, in der Du eigentlich nur statische Variablen hast, wirst Du vermutlich kaum eine Instanz erzeugen. (Macht so ja auch keinen Sinn!)
Daher solltest Du als Minimum etwas machen wie:

Java:
public class Var{
    private static BufferedImage iback;
    public static BufferedImage getIBack() {
        if (iback != null) return iback;
        iback = ImageIO.read(getClass().getResourceAsStream("/Back/back.png"));
        if (iback == null) throw new RuntimeException("Unable to load /Back/back.png");       
    }
}

Wobei das immer noch sehr schlechtes Design ist. So braucht man keinen Konstruktor mehr. Noch einen kleinen Tick besser wird es mit dem Singleton Pattern aber wie schon gesagt: Es sollte Objektorientiert gelöst werden und das bedeutet, dass Var ganz weg müsste ...
 

Mr.Strobel

Mitglied
In dem Beispiel bedeutet "damit was machen" einfach, dass Du mit der Geldbörse alles machen kannst, was eben möglich ist. Geld rein tun, schauen, was drin ist, wegwerfen, verbrennen, .... Nur wenn Du keinen Zugriff auf die Geldbörse hast, dann kannst Du all das nicht machen.

Das ist bei Programmen auch nicht anders.

Ansonsten was das Laden angeht
Bezüglich des Ladens habe ich in #3 auf etwas hingewiesen, woran es aus meiner Sicht liegen könnte.

Eine Klasse, in der Du eigentlich nur statische Variablen hast, wirst Du vermutlich kaum eine Instanz erzeugen. (Macht so ja auch keinen Sinn!)
Daher solltest Du als Minimum etwas machen wie:

Java:
public class Var{
    private static BufferedImage iback;
    public static BufferedImage getIBack() {
        if (iback != null) return iback;
        iback = ImageIO.read(getClass().getResourceAsStream("/Back/back.png"));
        if (iback == null) throw new RuntimeException("Unable to load /Back/back.png");     
    }
}

Wobei das immer noch sehr schlechtes Design ist. So braucht man keinen Konstruktor mehr. Noch einen kleinen Tick besser wird es mit dem Singleton Pattern aber wie schon gesagt: Es sollte Objektorientiert gelöst werden und das bedeutet, dass Var ganz weg müsste ...
Oke scheint mir logisch zu sein.
Aber nun zurück zur Standard Frage meintest du das es nicht geladen wird Weil es kein brauchbares Design hat oder weil es in einer falschen Klasse ist?

Ich werde morgen weiter auf die Antworten eingehen auch dir schonmal ein danke im voraus 👍
 
K

kneitzel

Gast
So der Pfad stimmte, vermute ich, dass es nicht geladen wurde, weil der Konstruktor von Var nicht aufgerufen wurde.

Das Problem entsteht durch das Design, denn es ist unlogisch, dass eine statische Variable durch den Konstruktor initialisiert wird. Dinge die nicht logisch sind, vergisst man leicht und sie sind schwer zu finden.
 

Mr.Strobel

Mitglied
So ich habe gesagt das ich euch den Code näher Bringen will, also hier ist er:
Meine main() Klasse von der aus das Programm Startet:
Java:
public class main {

    public static void main(String[] args) {
        new Var();
        new Gui();
        new Label();
        //...
    }

}
Meine Var() Klasse in der ich alle Variablen hineinschreibe:
Java:
public class Var {
    static BufferedImage iLogo, iBMenu, iButtonnew, iButtonopen,iBorder, igame;
    //rest der Variabeln z.B.:
    static int screenwidth = 800 ,screenheight = 500;   
    //...
    public Var(){
        try{
            iLogo= ImageIO.read(new File("rsc/Logo/Logo.png"));
            iBMenu= ImageIO.read(new File("rsc/Hintergrund/B1Menu.png"));
            iButtonnew = ImageIO.read(new File("rsc/Knopf/New.png"));
            iButtonopen = ImageIO.read(new File("rsc/Knopf/Open.png"));
            iBorder = ImageIO.read(getClass().getResourceAsStream("/Layout/Strich.png"));
            igame = ImageIO.read(getClass().getResource("/Layout/Gamehelp.png")
                        
        }catch (IOException e) {       
            e.printStackTrace();
            System.out.println("Bilder konnten nicht geladen werden!!");

        }
    }
}
Oben zu sehen jede Variante die ich bereits ausprobiert habe

Ein Label welches im JFrame ist und in dem die Images geladen werden:
Java:
public class Label extends JLabel {
private static final long serialVersionUID = 1L;
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        //Image breite, höhe, ... werden aus Var()genommen.
        g.drawImage(Var.iBMenu, 0,0,Var.screenwidth, Var.screenheight, null);
        g.drawImage(Var.iLogo, Var.screenwidth /2 - 200 , Var.screenheight / 2 - 200, 400,90,null);
        g.drawImage(Var.iButtonnew, Var.Button1X, Var.screenheight /2-75, 100,100,null);
        g.drawImage(Var.iButtonopen, Var.Button2X, Var.ButtonY, 100, 100, null);
        
        repaint();
    }
    
}
GUI() Klasse in der JFrame und JLabel liegen:
Java:
public class Gui {
    public Gui(){
        //Start Frame
        Var.jf1 = new JFrame();
        Var.jf1.setSize(Var.screenwidth , Var.screenheight);
        Var.jf1.setVisible(Var.visiblejf1);
        Var.jf1.addMouseListener((MouseListener) new MousHandler());
        Var.jf1.requestFocus();
        Var.jf1.setResizable(false);
        Var.jf1.setLocationRelativeTo(null);
        Var.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //Main Frame
        Var.jf2 = new JFrame();
        Var.jf2.setVisible(Var.visiblejf2);
        Var.jf2.addMouseListener((MouseListener) new MousHandler());
        Var.jf2.setSize(Var.screenwidth2, Var.screenheight2);
        Var.jf2.setExtendedState(JFrame.MAXIMIZED_BOTH);
        Var.jf2.setResizable(true);
        Var.jf2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        Var.jf2.setLayout(null);
        //Label1 (Projekte Ordner)
        Var.lbl1 =  new Label();
        Var.lbl1.setBounds(0,0,Var.screenwidth, Var.screenheight);
        //Label2 (Main)
        Var.lbl2 = new Label2();
        Var.lbl2.setBounds(0,0,Var.screenwidth2, Var.screenheight2);
        Var.lblgame = new Labelgame();
        Var.lblgame.setBounds(Var.xgame ,Var.ygame
                , Var.screenwidthgame     ,Var.screenheightgame);
        //Frames
        Var.jf2.add(Var.lbl2);
        Var.jf2.add(Var.lblgame);
        Var.jf1.add(Var.lbl1);
        
        //Draw Lable
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask(){
            @Override
            public void run(){
                //Frame / Label 1
                Var.jf1.setVisible(Var.visiblejf1);
                Var.lbl1.setVisible(Var.visiblelbl);
                //Frame / Label 2
                Var.jf2.setVisible(Var.visiblejf2);
                Var.lbl2.setVisible(Var.visiblelbl2);
                Var.lblgame.setVisible(Var.vislblgame);
            }
    
            
        }, 0,9);

            }
        
    
}
Noch ein Bild der Grundstruktur des Projektes:
unknown.png


Ich habe wieder einige Variablen gelöscht damit, Ihr es übersichtlicher habt, es geht ja nur um die BufferedImages und diese sind hoffentlich deutlich zu sehen.

Ich hoffe der Code kann euch helfen, bei weiteren Fragen helfe ich natürlich auch gerne.
Wie immer, danke im voraus :)
 
K

kneitzel

Gast
Der rsc Ordner ist der Resource-Ordner. Alles Unterhalb dieses Ordners landet in der Zielstruktur (Zielordner, Jar-File, was auch immer du baust).

Des Weiteren musst Du über den Classloader die Ressourcen laden. Daher ist ein Aufruf wie folgt notwendig:
Java:
iLogo= ImageIO.read(Var.class.getResourceAsStream("/Logo/Logo.png"));

Wichtig: Das führende / ist wichtig, denn sonst sucht er relativ zum Package der Klasse, und die ist wohl in einem Packages "pack1" so ich den Screenshot richtig interpretiert habe.

Und meine Vermutung mit dem Konstruktor ist dann auch hinfällig, denn Du erzeugst eine Instanz. Aber die Hinweise zum Design solltest Du dennoch einmal in Ruhe bedenken und schauen, wie Du diese übernehmen kannst. Das ist halt nicht gesagt worden um Dich zu "entmutigen" wie das jemand behautet hat (Vermutlich ein alter Bekannter - Tobias - mit erneut einem neuen Account ...) sondern um Dich dazu zu bringen, eben besseren Code zu schreiben. Denn durch Clean Code - und die angesprochene Punkte gehören da auch aus meiner Sicht dazu - erreicht man eben, dass man viele entmutigenden Probleme vermeidet.... Also eben genau das Gegenteil als das, was da unterstellt wurde ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A BufferedImage zeigt nur schwarz Java Basics - Anfänger-Themen 3
A BufferedImage Pixel Java Basics - Anfänger-Themen 7
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
T BufferedImage in Jar Java Basics - Anfänger-Themen 8
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
S BufferedImage heller/dunkler machen mit RescaleOp Java Basics - Anfänger-Themen 2
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
S BufferedImage Java Basics - Anfänger-Themen 2
Ernesto95 BufferedImage Teilbereich wieder transparent setzen Java Basics - Anfänger-Themen 16
M BufferedImage performant einlesen Java Basics - Anfänger-Themen 5
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4
O BufferedImage drehen, falsch positioniert Java Basics - Anfänger-Themen 5
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
H BufferedImage DPI verändern Java Basics - Anfänger-Themen 5
S jpeg bzw bufferedimage als PDF Speichern Java Basics - Anfänger-Themen 13
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
H BufferedImage Java Basics - Anfänger-Themen 5
F BufferedImage aus short[][][] Java Basics - Anfänger-Themen 3
Luk10 NPE bei BufferedImage[] Java Basics - Anfänger-Themen 4
S BufferedImage mit farbwerten füllen Java Basics - Anfänger-Themen 11
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
P BufferedImage als raw speichern Java Basics - Anfänger-Themen 3
C BufferedImage + Popup/Overlay Java Basics - Anfänger-Themen 2
E BufferedImage drucken Java Basics - Anfänger-Themen 3
R BufferedImage in JLabel Java Basics - Anfänger-Themen 2
G Serialisiertes BufferedImage wieder einlesen Java Basics - Anfänger-Themen 13
G Jpanel -> BufferedImage konvertieren Java Basics - Anfänger-Themen 7
G BufferedImage in Applet laden Java Basics - Anfänger-Themen 8
Q BufferedImage aus Bild in jar Java Basics - Anfänger-Themen 2
? BufferedImage löschen Java Basics - Anfänger-Themen 4
F Farben eines ganzen BufferedImage invertieren Java Basics - Anfänger-Themen 2
K Graphics2D und BufferedImage Java Basics - Anfänger-Themen 3
D wie kann ich ein BufferedImage komprimieren? Java Basics - Anfänger-Themen 7
reibi TIFF nach BufferedImage wandeln Java Basics - Anfänger-Themen 72
reibi Farbiges BufferedImage umwandeln zu 2farbig SchwarzWeiss Java Basics - Anfänger-Themen 7
E nullpointer bei BufferedImage Java Basics - Anfänger-Themen 2
M BufferedImage erzeugt OutOfMemoryError Java Basics - Anfänger-Themen 10
B Vorteil von Graphic2D und BufferedImage? Java Basics - Anfänger-Themen 6
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
X Image nach BufferedImage wandeln ? Java Basics - Anfänger-Themen 9
T BufferedImage kopieren Java Basics - Anfänger-Themen 6
G Image -> BufferedImage Java Basics - Anfänger-Themen 4
M Image/BufferedImage Java Basics - Anfänger-Themen 4
T Multiple BufferedImage Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
L Classpath Jar exportieren mit allen Libaries Java Basics - Anfänger-Themen 1
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
A Erste Schritte Zu Android exportieren Java Basics - Anfänger-Themen 6
S Erste Schritte .JAR-Datei exportieren Java Basics - Anfänger-Themen 15
C java Projekt mit Xuggler exportieren Java Basics - Anfänger-Themen 9
M Bilder in .Jar exportieren Java Basics - Anfänger-Themen 2
T .jar exportieren via Eclipse Java Basics - Anfänger-Themen 6
K Bilder mit Eclipse exportieren Java Basics - Anfänger-Themen 1
N Input/Output Exportieren Java Projekt Java Basics - Anfänger-Themen 6
A Eclipse - Java-Programm exportieren für Ubuntu TLS 10 Java Basics - Anfänger-Themen 9
A Java-Zeilenprogramm lässt sich nicht exportieren Java Basics - Anfänger-Themen 13
F Input/Output Daten importieren und Exportieren Java Basics - Anfänger-Themen 2
G Problem: Java Projekt als ausführbare Jar Exportieren (Eclipse) Java Basics - Anfänger-Themen 10
K Java Projekt als ausführbare Jar Exportieren (Eclipse) Problem Java Basics - Anfänger-Themen 24
M Exportieren von einem Project Java Basics - Anfänger-Themen 12
F Exportieren als ausführbare Jar-Datei unter Ubuntu nicht möglich Java Basics - Anfänger-Themen 17
R Werte sichern ohne zu exportieren? Java Basics - Anfänger-Themen 5
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4
S Projekt inklusive Verzeichnissstruktur exportieren(Jar)?? Java Basics - Anfänger-Themen 3
F Eigenes Package - Variable exportieren Java Basics - Anfänger-Themen 11
N Erste Schritte Exportieren der .jar Datei Java Basics - Anfänger-Themen 24
P WAV-Datei in Eclipse nutzen und in .jar exportieren Java Basics - Anfänger-Themen 5
F Applets mit Appletloader in lauffähige Datei exportieren Java Basics - Anfänger-Themen 3
C gif in Eclipse importieren und exportieren Java Basics - Anfänger-Themen 12
H Ausgabe nach Excel exportieren Java Basics - Anfänger-Themen 7
Hindi93 Netbeans Datei exportieren Java Basics - Anfänger-Themen 7
M Zeilen aus String exportieren Java Basics - Anfänger-Themen 5
M Javaprogramm mit Bildern als .jar-Datei exportieren(in Eclipse) Java Basics - Anfänger-Themen 10
T Programm als .jar exportieren Java Basics - Anfänger-Themen 6
U Projekt als Runnable Jar exportieren Java Basics - Anfänger-Themen 4
F Library mit JAR exportieren Java Basics - Anfänger-Themen 2
K JApplet Projekt als jar Datei exportieren Java Basics - Anfänger-Themen 9
C Probleme mit Exportieren einer jar-datei /keine Anzeige mehr Java Basics - Anfänger-Themen 5
J Eclipse Projekt Exportieren Java Basics - Anfänger-Themen 1
T ins Excel exportieren. Java Basics - Anfänger-Themen 23
N JTable als .html exportieren Java Basics - Anfänger-Themen 3
S Daten aus einer JTable in eine .doc-word- datei exportieren? Java Basics - Anfänger-Themen 7
S Datenbankeinträge nach csv exportieren Java Basics - Anfänger-Themen 3
M HSSF - JTable zu Excel exportieren Java Basics - Anfänger-Themen 13
O Ordner mit Bilddateien in jar-Datei mit exportieren Java Basics - Anfänger-Themen 18
G Programm mit Sounds exportieren Java Basics - Anfänger-Themen 3
K Eclipse: Jar exportieren Java Basics - Anfänger-Themen 2
V [Eclipse] Texturen in Jar exportieren? Java Basics - Anfänger-Themen 2
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
B Bericht generieren, Daten in Word/Excek exportieren Java Basics - Anfänger-Themen 5
D Projekt als jar exportieren: Wie externe jars einbauen? Java Basics - Anfänger-Themen 5
M Hashmap in Excel exportieren Java Basics - Anfänger-Themen 3
M Applikationen exportieren Java Basics - Anfänger-Themen 2
M programme exportieren Java Basics - Anfänger-Themen 5
M Projekt fertigstellen und exportieren Java Basics - Anfänger-Themen 13
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
F Fehlermeldung in Eclipse Java Basics - Anfänger-Themen 13
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben