JFrame als JAR unsichtbar trotz Exception Handling

xX_QueAnw_Xx

Mitglied
Hi, ich ein kleines Programm geschrieben. Die GUI ist mit NB zusammen geklicked (nichts aufwendiges). In diesem Programm verwende ich viele Bilder, wenn ich den COde via Netbeans ausführe funktioniert alles Wunderbar. Sobald ich das ganze als JAR ausführe wird nichts angezeigt. (Ich dachte also sofort an einen Pfad / Adressierungsfehler. Externe Resourcen in JARs einbinden ist ja immer etwas schwierig). Allerdings hat das auch nichts gebracht.

Problem:
Offensichtliches Problem: Es wird nichts angezeigt, wenn ich die VIA netbeans erzeugte JAR ausführe (ein Vorgang der sonst immer geklappt hat) Der Prozess wird allerdings erzeugt und steht im Taskmanager.

Die Java Console sagt dazu follgendes:
Code:
D:\Coding\Java\tmp\JRauchfrei\dist>java -jar JRauchfrei.jar
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(Unknown Source)
        at jrauchfrei.GUI.Mainframe.initPics(Mainframe.java:580)
        at jrauchfrei.GUI.Mainframe.initMyComponents(Mainframe.java:553)
        at jrauchfrei.GUI.Mainframe.<init>(Mainframe.java:41)
        at jrauchfrei.Main.main(Main.java:21)

Also in Zeile 580 (von Mainframe) steht follgendes: harm_dir = new File(url_harm.toURI());
Die komplette Funktion sieht so aus:
Java:
    private boolean initPics() {
       URL url_harm=getClass().getResource("/jrauchfrei/IMG/Harmloss");
       File harm_dir;
        try {
            harm_dir = new File(url_harm.toURI());
            harm=harm_dir.listFiles();
        } catch (URISyntaxException ex) {
          JOptionPane.showMessageDialog(this, "Could not open dir Harmlos\n"+ex, "Read IN", JOptionPane.ERROR_MESSAGE);

        }


        URL url_schreck=getClass().getResource("/jrauchfrei/IMG/Erschreckend");
        File schreck_dir;
        try {
            schreck_dir = new File(url_schreck.toURI());
            schreck=schreck_dir.listFiles();
        } catch (URISyntaxException ex) {
            JOptionPane.showMessageDialog(this, "Could not open dir Harmlos\n"+ex, "Read IN", JOptionPane.ERROR_MESSAGE);
        }
        int length=1;
        if(harm!=null && schreck!=null){
            length=harm.length+schreck.length;
            whole=new File[length];
            for(int i=0;i<harm.length;i++){
                whole[i]=harm[i];
            }
            for(int x=0;x<schreck.length;x++){
                whole[(x+harm.length)]=schreck[x];
            }
        }else
            JOptionPane.showMessageDialog(this, "Could not create Directory: Harmlos\nor Directory: Erschreckend\nJRAUCHFREI wasn't able"
                    + "to build a Gallerie", "Read IN", JOptionPane.ERROR_MESSAGE);
        return (harm!=null && schreck!=null);
    }

Edit/Update: So habe jetzt etwas weiter geforscht und herausgefunden das ich ein ähnliches Problem schoneimal hatte. (Damals gings ums erzeugen einer Schrift was ganz simple mit einem InputStream ging in etwas so:
Java:
InputStream test=Mainframe.class.getResourceAsStream("/jrauchfrei/IMG/Harmlos");

Allerdings brauch ich dieses mal umbedingt die Methoden der Klasse File. Weil /img/harmlos ein Verzeichniss ist und ich die Anzahl der darin befindlichen (Bild) Dateien +ein File array des gesammten Inhalts brauche. Hat jemand einen Lösungsvorschlag? Hab einen Totenpunkt

mfG QueAnw
 
Zuletzt bearbeitet:
Du kannst nicht einfach so File-Objekte mit Jar-Inhalten erzeugen.
Um einen anderen Vorschlag zu bekommen, solltest du vlt mal erklären was genau du machen willst und wieso du unbedingt File's brauchst.
 
Besorg dir die Position deines .jar (gab es meherere Threads zu, SuFu hilft) und öffne diese als ZipFile oder JarFile. Du kannst dann alle ZipEntrys bzw. JarEntrys auslesen und dir darüber die Daten des entsprechenden Objekts besorgen.
 
Um einen anderen Vorschlag zu bekommen, solltest du vlt mal erklären was genau du machen willst und wieso du unbedingt File's brauchst.
Es handelt sich um eine Art gallerie. In den 2 Ordnern sind verschieden Kategorisierte Bilder. Da vom User neue hinzugefügt werden können ist die Anzahl für mich unbekannt. Deswegen habe ich die 2 Ordner zu File objekten gemacht, daraus Filearrays(harm,schreck) und dann mit .length die Anzahl bestimmt (für den Slider) und via picChange(int) wird dann das Bild auf einen JLabel geändert:
Java:
    private void picChange(int value) {
        if(harm==null && schreck==null)
            return;
        if( (selected==1) && (value<=harm.length) ){
            Image source              = new ImageIcon(harm[value-1].getPath()).getImage();
            Image scaledImage         = source.getScaledInstance(487,367,Image.SCALE_SMOOTH);
            Icon scaledIcon           = new ImageIcon(scaledImage);
            jLabel1.setIcon(scaledIcon);
        }
        else if ((selected == 2) && (value <= whole.length)) {
            Image source              = new ImageIcon(whole[value-1].getPath()).getImage();
            Image scaledImage         = source.getScaledInstance(487,367,Image.SCALE_SMOOTH);
            Icon scaledIcon           = new ImageIcon(scaledImage);
            jLabel1.setIcon(scaledIcon);
        }
Selected ist eine INT Variable in der Gespeichert wird welche Kategorie ausgewählt ist
 
stimmt das dass ein Problem geben könnte, darüber habe ich noch gar nicht nachgedacht. Geht so etwas?
Wenn nicht werde ich wohl eine Art installertions Routine schreiben müssen. Die ein Verzeichniss erstellt bsp. c:\myapp und darin die Subordner und ihre eigene Dateien darein.
 

Zurück
Oben