Ich versuche, die CHM-Datei, die Hilfe enthält anzuzeigen, die von Ressourcen geladen wird:Java, von Ressourcen in jar geladen CHM-Datei Anzeige
try
{
URL url = this.getClass().getResource("/resources/help.chm");
File file = new File(url.toURI());
Desktop.getDesktop().open(file); //Exception
}
catch (Exception e)
{
e.printStackTrace();
}
Wenn das Projekt von NetBeans ausgeführt wird, wird die Hilfedatei angezeigt korrekt. Leider funktioniert es nicht, wenn das Programm von der JAR-Datei ausgeführt wird; Es führt zu einer Ausnahme.
Meiner Meinung nach wurde die interne Struktur von jar von URI beschrieben nicht erkannt ... Gibt es einen besseren Weg? Zum Beispiel mit der BufferReader-Klasse?
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
Ein analoges Problem mit der JPG-Datei mit der BufferedImage Klasse wurde ohne Konvertierung zu URI ...
Danke für Ihre Hilfe ...
Eine .jar-Datei ist eine Zip-Datei mit einer anderen Erweiterung. Ein Eintrag in einer .jar-Datei ist selbst keine Datei, und das Erstellen eines Dateiobjekts aus einer .jar-Ressourcen-URL funktioniert * nie *. Verwenden Sie [getResourceAsStream] (http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResourceAsStream-java.lang.String-) und [den Stream kopieren] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#copy-java.io.InputStream-java.nio.file.Path-java.nio.file.CopyOption .. .-) in eine temporäre Datei. – VGR
@ VGR: Danke für Ihren Kommentar. Leider kann es wahrscheinlich nicht getan werden. Das Programm wird als Java Web Start-Anwendung ausgeführt, einige zusätzliche Rechte werden benötigt (oder nicht?) ... – justik
Wenn Sie die Berechtigung zum Ausführen von Desktop.open haben, denke ich, dass Sie die Berechtigung haben, [eine temporäre Datei zu erstellen] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createTempFile-java.lang.String-java.lang.String-java.nio.file.attribute. FileAttribute ...-). – VGR