Portal > Foren > Java > Allgemeine Java-Programmierung > Zugriff auf Dateien in Jar
Antwort
 
Themen-Optionen
Alt 13.03.2006, 23:09 Nach oben    #1
Benutzer
 
Registriert seit: 01.02.2005
Beiträge: 64
Standard Zugriff auf Dateien in Jar

Ich habe hier grade ein kleines Problem:
Im Startbildschirm soll neben verschiedenen Einstellungen auch das Logo und eine Versionsnummeranzeige dargestellt werden.
Die Logoanzeige ist einfach ein JPanel mit geänderter "paintComponent", der im Constructor der Pfad zur Datei, sowie der _Versionstext_ übergeben wird.
Wenn ich den Code unter Eclipse ausführe, dann zeigt er alles perfekt an - erzeuge ich daraus allerdings eine .jar, dann bricht das Programm mit einer FileNotFoundEception ab. Die Bilddatei ist im entsprechenden Verzeichnis der .jar allerdings vorhanden.

Findet einer von euch den Fehler? Ich weiß nicht, woran es liegt... Bin aber ehrlich gesagt auch unerfahren mit Bildern - ich nutze die GTGE und habe da eine Image-Engine, die das Laden von Bildern übernimmt...

JPanel zu Logo-Anzeige
Code:
private class Logo extends JPanel{

        String Path;
        String Ver;
        BufferedImage LogoImage;
        boolean enableDrawing=false;

        public Logo(String Path, String Ver)
        {
            this.Path=Path;
            this.Ver=Ver;
        
            try {
                LogoImage= ImageIO.read(new File(Path));
                enableDrawing=true;
            }
            catch (IOException e) {e.printStackTrace();}
                       
            this.repaint();
        }
        public void paintComponent(Graphics g)
        {
            if(enableDrawing)
           {
               super.paintComponent(g);
               g.drawImage(LogoImage,0,0,this);
               g.setColor(Color.WHITE);
               FontMetrics fm = g.getFontMetrics();
               int x=(getWidth()-fm.stringWidth(Ver))/2;
               int y=(getHeight()-5-fm.getLeading());
               g.drawString(Ver,x,y);
            }
        }
In der Klasse "SettingsDialog":
Code:
//...hier steht Code
        Logoanzeige = new Logo("res/Logo.png","Pong V1.0", this);
        Logoanzeige.setBounds(0,0,140,235);
        this.getContentPane().add(Logoanzeige);
        
        //Fenster anzeigen
        this.setVisible(true);
//...und hier steht auch noch Code
__________________
  1. My software never has bugs. It just develops random features!
  2. Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for 'still doesn't work.'
  3. There are two ways to write error-free programs. Only the third one works.
Binary ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.03.2006, 23:44 Nach oben    #2
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 575
Standard

Um Daten aus einem .jar zu holen musst du auf das Archiv zugreifen. Das funktioniert nicht mit einem normalen Datei-Zugriff, sondern da musst du ein Programm haben welches .jar-Archive auslesen kann.

Gott sei Dank kann das der Classloader von Java

java Code:
  1. private class Logo extends JPanel{
  2.  
  3.         String Path;
  4.         String Ver;
  5.         BufferedImage LogoImage;
  6.         boolean enableDrawing=false;
  7.  
  8.         public Logo(String Path, String Ver)
  9.         {
  10.             this.Path=Path;
  11.             this.Ver=Ver;
  12.        
  13.             try {
  14.         // Getting the Data out of the an jar-file or the File-System using the classloader
  15.         LogoImage = Toolkit.getDefaultToolkit().createImage(this.getClass().getResource(Path));
  16.                 // LogoImage= ImageIO.read(new File(Path));
  17.                 enableDrawing=true;
  18.             }
  19.             catch (IOException e) {e.printStackTrace();}
  20.                        
  21.             this.repaint();
  22.         }
  23.         public void paintComponent(Graphics g)
  24.         {
  25.             if(enableDrawing)
  26.            {
  27.                super.paintComponent(g);
  28.                g.drawImage(LogoImage,0,0,this);
  29.                g.setColor(Color.WHITE);
  30.                FontMetrics fm = g.getFontMetrics();
  31.                int x=(getWidth()-fm.stringWidth(Ver))/2;
  32.                int y=(getHeight()-5-fm.getLeading());
  33.                g.drawString(Ver,x,y);
  34.             }
  35.         }

Und im Settings-Dialog muss jetzt ein / vor den Pfad, denn es ist jetzt das root-verzeichnis deines Projekts:

java Code:
  1. //...hier steht Code
  2.         Logoanzeige = new Logo("/res/Logo.png","Pong V1.0", this);
  3.         Logoanzeige.setBounds(0,0,140,235);
  4.         this.getContentPane().add(Logoanzeige);
  5.        
  6.         //Fenster anzeigen
  7.         this.setVisible(true);
  8. //...und hier steht auch noch Code


Übrigens solltest du dir angewöhnen Klassennamen großzuschreiben, jedoch deren Instanznamen klein.
Das kann sonst sehr verwirrend sein.
Beispiel:
Code:
JPanel jpanel = new JPanel();

Geändert von sparrow (13.03.2006 um 23:49 Uhr).
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.03.2006, 13:52 Nach oben    #3
Benutzer
 
Registriert seit: 01.02.2005
Beiträge: 64
Standard

Ok, danke! Jetzt funktioniert's!

Und, ja, das mit den Klassennamen / Instanzennamen mach ich in der Regel... habe nur den Code auf die schnelle für's Forum umformatiert und dabei halt mal nen "Tippfehler" gemacht... Ich tipp halt gerne mal schneller, als ich denken kann! *g*
__________________
  1. My software never has bugs. It just develops random features!
  2. Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for 'still doesn't work.'
  3. There are two ways to write error-free programs. Only the third one works.
Binary ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zugriff auf Konfiguration im verschachtelten Array Ben PHP-Programmierung 5 02.02.2007 12:47
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
dynamischer Zugriff auf statische Eigenschaft einer Klasse Ben PHP-Programmierung 10 15.11.2005 15:53
Dateien auf server schreiben von applet aus mr.no Allgemeine Java-Programmierung 23 21.02.2005 21:57
Zugriff auf Dateien Im Netz CyberHoney Desktop-Applikationen und Grafik 7 22.09.2004 16:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:02 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44