Also meine Aufgabe ist es, ein kleines Programm zu erstellen, das eine Liste von Mediendateien anzeigt und diese Mediendateien separat mit Standard-OS-Medienplayer ausführen.Korrekte Verpackung von runnable Jar-Projekt in Netbeans
Meine aktuelle Lösung ein Paket zu erstellen war, das alle Mediendateien hält, so etwas wie:
-com.media
|_a.mp4
|_b.mp4
den folgenden Code Kopien in ein temporäres Verzeichnis der ausgewählten mp4, läuft dann die Standard-os-Media-Player:
public File copyTempMedia(File tempAppFolder, String videoName) {
URL f = getClass().getResource(String.format("%s/%s", Constants.MEDIA_LOCATION, videoName));
File from = new File(f.getPath());
File to = new File(tempAppFolder.getAbsolutePath());
try {
FileUtils.copyFileToDirectory(from, to);
} catch (IOException ex) {
Logger.getLogger(MediGUIModel.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Temp video copied: " + to.getAbsolutePath() + "/" + to.getName());
return to;
}
public void triggerMediaPlayer(String fileLocation) {
System.out.println("Triggering media player: " + fileLocation);
try {
if (OPERATIN_SYSTEM.contains("Linux")) {
Runtime.getRuntime().exec("sh -c " + fileLocation);
} else if (OPERATIN_SYSTEM.contains("Windows")) {
Runtime.getRuntime().exec("cmd /c " + fileLocation);
}
} catch (IOException ex) {
Logger.getLogger(MediGUIModel.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
}
}
wenn ich das Programm durch Netbeans führen sie es als espected funktioniert, aber wenn ich einen clean/build
den Lauf machen die .jar
aus dem Build erstellt, die Mediendatei scheint nicht gelesen zu werden, so meine Fragen sind:
- Warum funktioniert es durch Netbeans und nicht durch Build .jar?
- Ist dies die beste Lösung für dieses Problem?
- Sollte ich die Medien anders verpacken?
Vielen Dank im Voraus.
bearbeiten
So, nachdem statt Doppelklick jar durch Konsole ausgeführt wird, ist eine Null-Zeiger-Ausnahme in der Zeile, wo ich die Datei lesen:
URL f = getClass().getResource(String.format("%s/%s", Constants.MEDIA_LOCATION, videoName));
Warum es in Netebeans funktioniert aber nicht auf Build/Glas?
Gibt es einen anderen Ort im Jar, in dem ich die Mediendateien platzieren könnte, so dass sie ohne Probleme durch getResource oder getResourceAsStream gelesen werden?
Hey Corey, habe ich versucht mit 'getResourceAsStream', aber das gibt nur null zurück. Irgendwelche anderen Vorschläge? – shep
Gibt es noch einen anderen Platz im Jar, in dem ich die Mediendateien platzieren kann, damit sie problemlos mit 'getResource' oder' getResourceAsStream' gelesen werden können? – shep
Sie erhalten eine Null, weil der Pfad nicht ganz richtig ist. Fügen Sie beispielsweise einen führenden Schrägstrich "/com/media/a.mp4" hinzu. – Corey