Resourcen im Jararchiv nicht abrufbar

MARJAVA

Aktives Mitglied
Hallo zusammen,
ich habe gerade ein kleines Problem bei meinem Programm mit meinen resourcen im Jar-Archiv.
über die gewohnte Methode mit dem Classloader habe ich die resource in einem Ordner im Klassenpfad liegend eingebunden. Und doch sucht er nach der Erstellung der Jardatei in einem externen Verzeichnis. Das Programm läuft in eclipse wunderbar, doch nach dem Exportieren sucht er vergeblich nach den Files.
Nun frage ich mich gerade, ob die Files überhaupt im Klassenpad des Jararchives abgespeichert werden?
Habe ich die Dateien ins falsche Verzeichnis gespeichert oder was ist fehlerhaft? Habe neben dem Code noch meine Verzeichnisstruktur angehängt.
Java:
    private void showInfo() {
        JPanel jpAbout = new JPanel();
        jpAbout.setLayout(new BorderLayout());
        JEditorPane editorPaneAbout = new JEditorPane();
        editorPaneAbout.setContentType("text/html");
        String path = "resource/About.html";
       
        File dir = new File(getClass().getClassLoader().getResource(path).getFile().toString()
                .replace("%20", " "));
   
        try {
            URL urlAbout =dir.toURI().toURL();
            System.out.println(urlAbout);

            editorPaneAbout.setPage(urlAbout);
        } catch (MalformedURLException e) {
            logger.error(getClass() + " Methode Drucken", e);
            e.printStackTrace();
        } catch (IOException e) {
            logger.error(getClass() + " Methode Drucken", e);
            e.printStackTrace();
        }
        jpAbout.add(BorderLayout.CENTER, editorPaneAbout);
        JInternalFrame jifAbout = new JInternalFrame("Info", false, true);
        jifAbout.setBounds(170, 140, 300, 220);
        jifAbout.setVisible(true);
        Container contentPaneAbout = jifAbout.getContentPane();
        contentPaneAbout.add(jpAbout);
        jlp.add(jifAbout, JLayeredPane.POPUP_LAYER);
    }
 

Anhänge

  • Verzeichnisstruktur.JPG
    Verzeichnisstruktur.JPG
    39,3 KB · Aufrufe: 33
Oft verursacht eclipse hier probleme weil es classloader überschreibt wenn die datei exportiert wird. Öffne die fertige jar mal mit einem Zip viewer und schau ob die dateien noch da sind. Desweiteren ist es übersichtlicher Klass.class.getResource zu nehmen.
 
Also habe eclipse das noch mal korrekt verklickern müssen, dass die Resourcen vom system erkannt werden. Das funktioniert jetzt bzw. sind die Files nun in der jar-Datei.

Leider sucht das Programm nun während der Laufzeit die Files nicht in der Jar-Datei sondern im Relativen Pfad (den ich bei der Programmierung angab) vom Verzeichnis der Jar-Datei aus. Leider bleibt das ein externes Verzeichnis, in dem er sucht.
Hat die Methode denn ein Problem. Wieso wird sie überschrieben. Ich möchte das der Code dafür sorgt die Datei im Archiv zu suchen. Was kann ich denn dafür tun?

Ich habe in meinem Eclipse nur das src-Verzeichnis, in der sich alles verzweigt.
 
In deinem Code verlangst du explizit nach einem File. Das funktioniert in Eclipse, denn da liegen die Resourcen ja im Filesystem. Wenn du aber ein Jar-Archiv aus deinem Projekt machst, sind die Resourcen Teil des Archivs. Probiere mal folgendes:

Code:
InputStream inputStream = <DeineKlasse>.class.getClassLoader().getResourceAsStream(path);
// hier vom inputStream lesen ...

Das sollte funktionieren.

Cheers,
Andy
 
Da du eine URL brauchst, warum konvertierst du die URL zu einem File zu einem String zu einer URI zu einer URL, anstatt einfach bei der URL zu bleiben?

Also statt:
Java:
 File dir = new File(getClass().getClassLoader().getResource(path).getFile().toString()
                .replace("%20", " "));
URL urlAbout =dir.toURI().toURL();
einfach:
Java:
URL urlAbout = getClass().getClassLoader().getResource(path);
 
@Andij:
An meiner Codestelle an der ich meine Resource in das Zielverzeichnis kopiere funktioniert die Anweisung mit dem InputStream einwandfrei, danke

@mrBrown:
An meiner Codestelle, an der ich die Datei als URL-Pfad benötige brauchte ich die Anweisung getResource(). Hier war ich etwas zu umständlich. Doch das zeigt mir, dass auch die Anweisung als File funktioniert. Danke
 
An meiner Codestelle, an der ich die Datei als URL-Pfad benötige brauchte ich die Anweisung getResource(). Hier war ich etwas zu umständlich. Doch das zeigt mir, dass auch die Anweisung als File funktioniert. Danke
Ich hab ehrlichgesagt keine Ahnung, was du damit sagen willst ´😀

Die Variante mit File kann funktionieren, aber muss man bei dem umkonvertierten immer auf Sonderzeichen etc achten, wie zB das ' '/%20
 

Zurück
Oben