Ich habe folgendes Problem: Ich bin dabei, mir eine Verwaltung für meine Musiksammlung zu Programmieren. Dabei möchte ich Audio-Dateien öffnen. Da es mir zu Aufwändig ist einen Mp3-Player zu schreiben (und da ich das noch lernen müsste), will ich die Dateien mit WindowsMediaPlayer oder vlc-player öffnen. Programme habe ich bis jetzt immer mit
Java:
Runtime.getRuntime().exec(pfad);//pfad = pfad zur .exe
ausgeführt. Doch wie öffne ich jetzt Dateien mit dem Standardprogramm für diesen Dateityp (oder alternatives Programm, sollte man wenn möglich wählen können) aus Java heraus.
Schonmal Danke im Voraus für eure Hilfe!
Da sollte das jdic package genau das richtige für dich sein.
Mit Desktop.open(); oder so kannst du dann Dateien in Standartprogrammen öffnen lassen. Das Prog was in deinem System dann als Standart für den Dateityp angegenb ist wird dann benutzt.
So hab nochmal ein Problem dazu:
nachdem ich jdic eingebunden habe und alles funktioniert, hab ich mir von Netbeans ein Executable-JAR-File erstellen lassen, inklusive des Ausgabeordners "dist" verschoben und diesen umbenannt. wenn ich nun das Jar-File audführe funktioniert alles, außer dem Abspielen der Titel.
Das Programm funktioniert nur, wenn es von Netbeans ausgeführt wird.
P.S.: ja, der lib-Ordner mit den Jar-Bibliotheken ist noch im Verzeichnis
Eigentlich braucht man ab Java 1.6 JDIC nicht mehr. Da ist der meiste Teil der Funktionalität in der Standard-API drin. Stichwort: Desktop (Java Platform SE 6)
ich habe es jetzt mal mit den Java-eigenen Funktionen versucht und mir das neue Java gedownloadet, es funktioniert nicht :-(
hier ist mein Code:
Java:
privateDesktopD=Desktop.getDesktop();privateFileAkt=null;//Rest vom Code, nicht relevant () Akt wird initialisiertif(Akt!=null){try{D.open(newFile(Akt.toString()));}catch(IOException ex){Logger.getLogger(Manager.class.getName()).log(Level.SEVERE,null, ex);}}
und hier die Exception:
Code:
05.05.2010 17:02:06 Logic.Manager playTrack
SCHWERWIEGEND: null
java.io.IOException: Failed to open file:/M:/Musik/___Sonstiges/Green%20Day/Green%20Day%20-%20'21%20Guns'%20(Official%20Music%20Video)%20HD.mp3. Error message: Unbekannter Fehler
at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:59)
//und so weiter (falls benötigt kan ich das ja noch posten)
Dachte ich mir doch...
Deine Musikdatei kann nicht eingelesen werden.
Setze zum Testen die Datei mal in dein Projektverzeichnis, gib ihr einen vernünftigen Namen und versuchs noch mal.
Das funktioniert auch nicht, außerdem bringt mir auch dann nicht viel, wenn es funktioniert, da ich damit ja meine Musiksammlung verwalten will und der ganze ordner M:\Musik verwaltet wird (ca. 10GB). Und wenn das jetzt im Projektverzeichnis steht hab ich noch mehr unordnung, das hab ich shon halbwegs logisch da gespeichert. Also als Lösung nicht so geeignet
also Akt wird aus einer ArrayList (mit Files) selektiert.
Java:
publicvoidfirst(){//Das ist nur eine der methoden zum befüllen von Akt
index =0;Akt=Found.get(index);}
Das new File(Akt.toString()) hab ich gemacht, da einfach nur Akt nicht funktionierte, könnte ja sein das es da dran lag, hat aber auch nichts geholfen. Also das D.open() funktioniert mit .jpg-s mit .gif-s mit.txts (auch .ini-s) usw, aber nicht mit mp3s?
woran könnte das liegen? Ich hab WMP mal nochmal als standardprogramm gesetzt und es funktioniert immer noch nicht.
Bin echt ratlos.
Das ganze spielt sich in einer IO-Klasse ab, die die MP3-List an meine eigentliche Logik weitergibt. Wenn das mit dem Pfad also nicht stimmt, müssten die anderen Dateien auch nicht funktionieren, da ich andere Dateien(albumcover) zum Test auch reinnehme (keine Abfrage auf mp3 oder wma). Und die "%20" in der Exception sind im normalen Pfad eigentlich Leerzeichen(werden so auch bei Akt.toString() ausgegeben, sind nur bei der exception falsch).
nicht die %20 haben mich gestört sondern der Führende Slash und vor allem das es kein backslash ist..... Wenn ich eine Test Exception auslöse mit einer Datei die es Nicht gibt sieht das so aus :
Code mit Datei die Es nicht Gibt:
Java:
package test;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;publicclass testclass {publicstaticvoidmain(String[] args){File f =newFile("C:\\test.txt");try{FileReader r =newFileReader(f);
r.read();}catch(Exception e){
e.printStackTrace();}}}
Exception:
Java:
java.io.FileNotFoundException:C:\test.txt (DasSystem kann die angegebene Datei nicht finden)
at java.io.FileInputStream.open(NativeMethod)
at java.io.FileInputStream.<init>(UnknownSource)
at java.io.FileReader.<init>(UnknownSource)
at test.testclass.main(testclass.java:12)
Ich gehe mal davon aus das du Windows nutzt und das es eine Deutsche version ist, nun vergleichen wir mal:
try{D.open(newFile("C:\\a.mp3"));}catch(IOException ex){Logger.getLogger(Manager.class.getName()).log(Level.SEVERE,null, ex);}// so hab ich das auch probiert:try{D.open(newFile("C://a.mp3"));}catch(IOException ex){Logger.getLogger(Manager.class.getName()).log(Level.SEVERE,null, ex);}
Aber es gibt immer wieder die gleiche exception mit dem gleichen Pfadnamen-Fehler
P.S.: Die Datei C:\a.mp3 existiert und ich hab keine Schreibfehler in irgendeinem Pfad
Hat niemand ne Idee?
Hab mal wieder mit jdic probiert, das funktioniert in Netbeans, aber als jar-File passiert dort auch nichts (wie oben erläutert).Bei der Java-Standard-Lösung funktioniert es auch nicht. Die File-Objekte existieren und sind richtig initialisiert. Aber bei Musikdateien geht das mit dem D.open() nicht. Alle anderen Dateien lassen sich öffnen. Könnte es vllt am Windows Media Player liegen?
Wäre für Hilfe sehr dankbar.