Input/Output ProcessBuilder und Windows - Konsole verbergen?

Der Code
Java:
private Process p;
private static fianl String VLC = ...; // absoluter Pfad zum VLC-Player.
private String path;
...
public void method() {
...
ProcessBuilder pb = new ProcessBuilder(VLC, 
							path, "vlc://quit", 
							"--no-video", "-I dummy");
p = pb.start();
...
}
startet einen neuen Prozess, der den VLC-Player öffnet und die Tonspur einer Quelle
Code:
path
wiedergibt, ohne die GUI des VLC-Players zu zeigen und ihn nach dem Abspielen wieder beendet.

Der Codeschnipsel funktioniert soweit und macht das, was er soll. Unter Mac OS passiert auch nichts weiter, als dass eben beschriebene.
Unter Windows allerdings, öffnet sich im Vordergrund eine Eingabeaufforderung, in der die Ausgaben des VLC-Players angezeigt werden.

Gibt es eine Möglichkeit, die das Öffnen der Eingabeaufforderung unterdrückt oder zumindest in den Hintergrund legt? Oder gibt es gar die Möglichkeit, den Prozess als Hintergrundprozess zu deklarieren?
 
Zuletzt bearbeitet:
Meinst du mit Eingabefenster das schwarze CMD.exe Fenster?

Wenn ja poste ich einfach mal den Code den ich zurzeit "standardmäßig" verwende und ohne Probleme funktioniert:
Java:
String cmd[] = new String[]{ [Programmpfad], [Argumente] };
Runtime.getRuntime().exec(cmd, null, new File([Programmordner]));
 
Ja, mit der Eingabeaufforderung meine ich Fenster von
Code:
cmd.exe
, bzw. eig. heißt es dann
Code:
Path\vlc.exe
.

Mit
Code:
Runtime.getRuntime().exe(...)
habe ich einige Zeit herumgespielt, bisher hat das allerdings nicht zum gewünschten Erfolg geführt. Unter Mac OS war das überhaupt kein Problem, unter Windows schon.
Wenn ich unter Windows ein Programm mit
Code:
java Programmname
über die Eingabeaufforderung geöffnet habe, klappt das prima, aber sobald ich mein Programm zu einem
Code:
.jar
-Archiv bundele, passiert an der Stelle, die den Systemcall machen soll, gar nichts.
Allerdings habe ich eine etwas andere Syntax verwendet:
Java:
Process p = Runtime.getRuntime().exec(VLC + " " + path + " vlc://quit --no-video -I dummy");
Kann es vielleicht daran liegen? Vorstellen kann ich mir das aber nicht.
 
Naja ich hatte bei den ersten malen immer das Problem, dass keine Leerzeilen auftauchen dürfen, da es sonst nicht erkannt wird.
Unter Windows (Mit MacOS habe ich das nie geprüft) ist das Problem, dass Ordner manchmal anderst heißen als es dransteht.
Bsp: Win7 und Vista, heißt der Ordner "Programme" in Wirklichkeit: "Program Files".

Durch meine obig beschriebene Methode wird genau dieses Problem zu 100% vermieden, weil es egal ist ob da Leerzeichen sind.


Deine Erklärung verstehe ich jedoch nicht ganz:
"java Programmname" geht, aber wenn du es zu einer "jar" machst nicht?

Meine Java Programme starte ich in dem Sinne immer über java [Programmname] und haben auch alle die Endung .jar
Entschuldige aber das leuchtet mir gerade nicht ganz ein.
 
Der Pfad ist mir total egal. Der ist schon richtig. Zu Programmstart habe ich, sofern noch nicht im settings-file gespeichert, einen Öffnen-Dialog, mit dem der VLC Player gewählt werden muss. Da bekomme ich den absolut korrekten Pfad schon her.

Mh, da habe ich mich zu kurz ausgedrückt ...

Wenn ich ein Programm mit
Code:
javac [Mainklasse.java]
kompiliere, kommt zunächst eine Datei
Code:
[Mainklasse].class
heraus, diese kann ich mit
Code:
java [Mainklasse]
über die Konsole starten.
Eigentlich exportiere ich das Programm aber mit Eclipse. Aus dem Exportprozess fällt hinten eine
Code:
[Programmname].jar
-Datei heraus.

Was ich meinte ist:
Es funktioniert, wenn ich per Hand kompiliere und auf der Konsole per
Code:
java [Mainklasse]
das Programm starte. Dann wird der VLC-Player gestartet und die Tonspur abgespielt.
Es funktioniert nicht, wenn ich das von Eclipse exportierte jar-File per Doppelklick starte. Das Programm läuft zwar, aber es startet nicht den VLC-Player.
 
Es funktioniert nicht, wenn ich das von Eclipse exportierte jar-File per Doppelklick starte. Das Programm läuft zwar, aber es startet nicht den VLC-Player.
Dann erstell doch die jar mal selbst, so 100% minimalistisch:
Code:
Main-Class: ...
Und fertig. Es kann ja sein, dass Eclips da irgendwelche einstellungen reinhaut, die Windoof nich mag.
 

Neue Themen


Zurück
Oben