Frage

Unser Projekt in Eclipse etwa zeigt die folgenden Ordner:

application
    - src
    - JRE System Library [1.6]
    - Referenced Libraries
    - lib
    - rsc

In unserem Projekt möchten wir Datei> Exportieren ...> Ausführbare JAR

Nun, das ist gut, mit einigen Ausnahmen funktioniert. Wenn wir unsere application.jar ausführen wollen, müssen wir noch den Ordner rsc / in der gleichen Position wie application.jar kopieren

In rsc / haben wir andere Ordner für die Trennung der verschiedenen Teile. Im Grunde laden wir die Stücke mit dem Code (auch ein wenig verändert, aber der Pfad Stil ist korrekt)

strUrl = "file:rsc/properties/Constants.properties";
url = new URL(strUrl);
ImageIcon icon = new ImageIcon(url);

Ich konnte auf der rechten Maustaste rsc /> Build Path> Verwendung als Quellordner.

Aber das funktioniert auch nicht, weil Eclipse nicht automatisch mit dem rsc Ordner in den Papierkorb / -Ordner kopieren. Und dann können wir führen Sie es nicht mehr vom Terminal (nicht in Glas verpackt)

Bearbeiten : warum nicht in der Lage ist, den Schatten stellen diese korrekt zu handhaben? Warum hat es Probleme mit „verschachtelten“ Ausgabeordner? In der Quelle-Registerkarte des Build Path Dialog, konnte ich leicht die rsc / -Ordner mit den Ausgabeordner Satz bin / rsc / hinzufügen, aber es scheint nicht möglich zu sein verschachtelten Ordner zu setzen ...


EDIT 2 : Jetzt habe ich in der Lage eine XML-Datei zu erstellen, das Zeug mit Ameise zu bauen, und es irgendwie geschafft, den rsc-Ordner direkt in das Glas aufzunehmen. immer noch nicht aus den gleichen Fehler ausgeführt. Muss ich wirklich die Ressourcen überprüfen Pfade, ob sie in einer JAR sind oder nicht? Der Inhalt der JAR ist nun folgendes:

META-INF/
META-INF/MANIFEST.MF
configurator/
controller/
editor/
gui/
logic/
networking/
rsc/
rsc/gamesettings/
rsc/levels/
rsc/pics/
rsc/properties/
util/

aber Java immer noch hasst mich und wirft java.io.FileNotFoundException: rsc/properties/Constants.properties mit einem stacktrace von rund 100 Zeilen.


jemand eine Idee, wie es zu tun? thx & Grüße

War es hilfreich?

Lösung

Wenn Sie rsc als Quelle markieren Ordner von Eclipse seinen Inhalt in das Ausgabeverzeichnis kopiert. Oder Sie könnten nur rsc unter src bewegen, wenn Sie die Ressourcen, die in der Ausgabe Gruppe wollen.

Dann können Sie verwenden Class.getResource("/properties/Constants.properties") oder Class.getResource("/rsc/properties/Constants.properties") und es wird funktionieren unabhängig davon, ob Ihre App als Glas verpackt ist oder von der Quelle ausgeführt wird.

Als Nebenbemerkung, das file: Protokoll nur mit normalen Dateien, um Zugriff auf Dateien in dem Topf funktioniert würden Sie haben so etwas wie new URL("jar:file:app.jar!/rsc/properties/Constants.properties") verwenden.

Andere Tipps

Sie könnten versuchen: In der Java Build Path Dialog, gehen Sie auf die Registerkarte Bibliotheken und wählen Sie „Add-Klassen-Ordner ...“. Wählen rsc aus der Klasse Ordnerauswahl-Dialog. Der Inhalt des rsc Verzeichnisses wird nun in der ausführbaren JAR-Datei enthalten sein.

(Beachten Sie, dass rsc selbst wird nicht enthalten sein, so dass Sie ein neues Unterverzeichnis unter rsc hinzufügen müssen können die Verzeichnisstruktur in dem Glas richtig zu machen.)

Für diese Art von Anwendung, würde ich empfehlen mit Maven , die automatisch das tut, wenn ein Glas zu schaffen . Es gibt sogar ein Eclipse-Plugin .

Sie können auch benutzen Ant .

ich dies tun in der Regel von Hand, in Ihrem Fall jar -uf foo.jar rsc Dazu gehören alle Ihre Ressourcen. Sie können ein Skript oder tun dies in ant

schreiben

Wie Sie sagen in Edit 2 , dass Sie alle in einem Glas haben, sollte diese Arbeit:

String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top