Java aus Java starten

quivadis

Aktives Mitglied
Hallo Freunde,

ich habe folgendes Problem:

Aus einer Java-Anwendung (JUnit) möchte ich, zur Vorbereitung des Tests, einen Server starten. Der Server ist in Java geschrieben und beim starten muss ich ihm noch weiter Argumente mitgegeben werden.

Was ich bisher versucht habe:

Java:
    Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(new String[]{"/gnome-terminal/java -jar /home/cst/Selenium-RC/selenium-server-1.0.3/selenium-server.jar -firefoxProfileTemplate \"/home/cst/.mozilla/selenium\""});

Ich bekomme immer folgende Fehlereldung:

java.io.IOException: Cannot run program "/gnome-terminal/java -jar /home/cst/Selenium-RC/selenium-server-1.0.3/selenium-server.jar -firefoxProfileTemplate "/home/cst/.mozilla/selenium"": java.io.IOException: error=2, No such file or directory


Mache ich grundsätzlich etwas verkehrt?
Ich arbeite unter Linux.

Quivadis

PS: Das ist einer meiner vielen Versuche. Die Fehlermeldung ist immer die gleiche. Wenn ich das ganze mit Maven mache bekomme ich auch eine Fehlermeldung, deswegen dachte ich, ich versuche das ganze mal so.
 
Zuletzt bearbeitet:

quivadis

Aktives Mitglied
> Was soll das "/gnome-terminal/" vor dem Befehl? --> Das soll eigentlich die Konsole /bin/bash aufrufen.

Kann auch sein das ich komplett auf dem Holzweg bin. Was ich eigentlich will ist, einen Server starten. Er hat ausgaben auf der Konsole, deswegen die Konsole vorher. Wenn ich die Konsole weglasse ist zwar die Fehlermeldung weg, aber der Server ist nicht gestartet.
 

L-ectron-X

Gesperrter Benutzer
Vielleicht hilfts, wenn du die main()-Methode des Servers aus deinem Programm heraus aufrufst.
Also statt einen Prozess und damit einen weiteren Interpreter zu starten, einfach die main()-Methode des Servers aufrufen.
 
G

Gonzo17

Gast
Auch auf die Gefahr, dass ich etwas sage, dass du schon längst abgecheckt hast.. ;)
Einer der Pfade scheint falsch zu sein, hast du mal geschaut, ob sich da etwas befindet?
 

quivadis

Aktives Mitglied
Ich danke euch. Ich werde jetzt das ganze mal über ein Script probieren.

Also heißt das, das man kein Java aus Java selbst aufrufen kann, weil die runtime.exec-Methode den Java-interpreter nicht finden kann da er keine Umgebungsvariablen mitbekommt?
 

homer65

Top Contributor
Also heißt das, das man kein Java aus Java selbst aufrufen kann, weil die runtime.exec-Methode den Java-interpreter nicht finden kann da er keine Umgebungsvariablen mitbekommt?

Nein.
So ein zwischengeschaltetes Skript vereinfacht die Sache nur enorm.
Grundsätzlich wirst du es womöglich auch ohne Skript hinbekommen können.
Aber du siehst ja selber, das es dann nicht so einfach ist.
 

quivadis

Aktives Mitglied
Hier das script:

selenium-RC.sh
Java:
#!/bin/sh
# export JDK_HOME=/usr/lib/jvm/java-6-sun/
echo "Selenium-RC starten"
java -jar /home/cst/Selenium-RC/selenium-server-1.0.3/selenium-server.jar -firefoxProfileTemplate "/home/cst/.mozilla/selenium"

Hier der Aufruf:
Java:
 Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("./selenium-RC.sh");

Nun kommt keine Fehlermeldung mehr, er startet aber den Server nicht im Hintergrund. Der Server soll ja im Hintergrund laufen. Im Terminal funktioniert das script.
 

homer65

Top Contributor
./selenium-RC.sh ist ein relativer Pfad. Bist du sicher, das daraus der richtige absolute Pfad wird? Ich nicht.
Zur Sicherheit solltest du es mal mit einer absoluten Pfadangabe probieren.
 

quivadis

Aktives Mitglied
Er startet den Server, aber irgendwie so das spätere Methoden welche ihn brauchen nicht darauf zugreifen können, erst beim nächsten start der Anwendung geht es auch, weil der Server noch läuft.

Wenn man das ganze so aufruft geht es auch beim ersten mal:
Java:
 ProcessBuilder pb = new ProcessBuilder("selenium-RC.sh");
 
Zuletzt bearbeitet:

quivadis

Aktives Mitglied
So das eigentliche Problem ist gelöst, aber dadurch ergibt sich ein neues. Da ich den Server jetzt ja über ein script starte, wie beende ich ihn von Java aus wieder?

Sprich, wie beende ich die JVM, wo der Server läuft, die ist ja ein eigener Process und hat ja nix mehr mit dem eigenen Programm zu tun aus dem er gestartet wurde.
 

Andi_CH

Top Contributor
Auf irgend eine Art kommunizierst du ja mit dem Server - Sag ihm doch einfach er soll terminieren ;-)

Vielleicht auch eine Möglichkeit ist, dass der Server X Minuten nach dem letzten Request terminiert und der Client, wenn der Server nicht mehr läuft, diesen startet?
 

homer65

Top Contributor
Du besorgst dir die pid des Java Servers:
Code:
#!/bin/sh
# export JDK_HOME=/usr/lib/jvm/java-6-sun/
echo "Selenium-RC starten"
java -jar /home/cst/Selenium-RC/selenium-server-1.0.3/selenium-server.jar -firefoxProfileTemplate "/home/cst/.mozilla/selenium" &
pid=$!
exit $pid
Bitte unbedingt das & an den java Befehl anhängen, damit dieser im Hintergrund läuft!!!
Dann kannst du den Prozess per "kill pid" beenden. pid ist dabei natürlich eine Zahl.
 

quivadis

Aktives Mitglied
Danke für die Erweiterung des scripts.

Ich habe nun das Problem das ich das script nicht beenden kann.

Gestartet habe ich es so:
Java:
  ProcessBuilder pb = new ProcessBuilder("selenium-RC.sh");
und zwar wirklich nur das.

wenn ich:
Java:
 pb.start();
dazuschreibe, bekomme ich folgende Meldung:
Code:
java.io.IOException: Cannot run program "selenium-RC.sh": java.io.IOException: error=2, No such file or directory

Ich muss ja das erstmal das script beenden, damit ich an den exit-code komme ...
 

homer65

Top Contributor
Wieder das Problem mit den relativen Pfaden. Besser absolute benutzen.
Und das Skript beendet sich, wenn man den & beim java Befehl nicht vergisst.
Deswegen schrieb ich:
Bitte unbedingt das & an den java Befehl anhängen, damit dieser im Hintergrund läuft!!!
 

quivadis

Aktives Mitglied
Gut das sh-script beendet sich von alleine, aber der Java-Server läuft immer noch, auch wenn das Prog beendet ist.

Wie kann ich das beenden?
 
G

Gastredner

Gast
Indem du mit dem Server redest und ihm so mitteilst, dass er sich doch bitte beenden soll. Dies könntest du z. B. über Sockets realisieren. Du startest den Server über das Skript. Dieser lauscht auf einem bestimmten Port. Mit deinem Hauptprogramm verbindest du dich über diesen Port mit deinem Server und kannst anschließend Kommandos übermitteln, die über die Verbindung dann bestätigt oder abgelehnt werden.
Die Alternative wäre, dass du über Shell-Befehle die PID deines Servers ermittelst und ihn über kill abschießt, aber das wäre eher hässlich.
 

CroniD

Aktives Mitglied
Schau mal hier nach: Galileo Computing :: Java ist auch eine Insel – 11.5 Ausführen externer Programme *

Manchmal ist die Arbeit mit der ProcessBuilder Klasse nicht sehr angenehm. Dafür gibt es dann diese nette Lib: Commons Exec - Apache Commons Exec

Übringes die Arbeit von einem Shell Script machen zu lassen ist nur dann vorteilhaft, wenn du keine weitere Kontrolle über den Prozess brauchst. :)

Evtl. solltest du nach dem Starten des Servers noch kurz in deinem Programm warten, den der Server muss schließlich erstmal hochfahren. :)
 

L-ectron-X

Gesperrter Benutzer
Wie gesagt, meiner Meinung nach ist es gar nicht nötig, einen weiteren Prozess zu starten, wenn man im zu startenden Java-Programm eine main()-Methode hat. Einfach diese Methode aufrufen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
Tommy135 Input/Output Application aus Java package starten Allgemeine Java-Themen 2
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
Developer_X Java Applets in Browser starten Allgemeine Java-Themen 9
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
P Starten einer Java .jar-Datei Allgemeine Java-Themen 0
B Java GUI via SSH starten... Allgemeine Java-Themen 5
S VLC + Lied über Java starten Allgemeine Java-Themen 17
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Ubuntu-VM Java starten Allgemeine Java-Themen 24
C Java Programm über SSH starten Allgemeine Java-Themen 16
Jackii Java Programm aus anderen Java Programm starten Allgemeine Java-Themen 20
G Java Programm aus Java Programm starten Allgemeine Java-Themen 6
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
A Jars oder JNLPs aus java code in gleicher JVM starten Allgemeine Java-Themen 2
N Internet Explorer mit bestimter Java Runtime starten Allgemeine Java-Themen 2
C Java Anwendung nur einmalig starten Allgemeine Java-Themen 10
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
M Java Programm als Dienst starten... Allgemeine Java-Themen 4
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
M Java Klasse automatisch starten Allgemeine Java-Themen 3
E Zweites Java Programm sichtbar starten Allgemeine Java-Themen 4
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
V Java-Programm automatisch starten Allgemeine Java-Themen 2
Developer_X Mit einer Batch Datei eine Java Datei starten Allgemeine Java-Themen 4
M Wie Java-Programm über Batch-file starten? Allgemeine Java-Themen 8
T .jar Datei aus Java Code starten Allgemeine Java-Themen 10
G Java- Programm mit bat- Datei starten Allgemeine Java-Themen 16
F Hilfe beim Starten einer Java Anwendung unter Windows gesuch Allgemeine Java-Themen 8
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
S HSQL db servermode aus Java starten Allgemeine Java-Themen 6
G weiteres Java Programm vom Applet aus starten? Allgemeine Java-Themen 9
H Php Script aus Java Applikation starten Allgemeine Java-Themen 2
L Programm läßt sich wegen Java unter Linux nicht starten Allgemeine Java-Themen 4
A Setup von einer Java-Applikation starten Allgemeine Java-Themen 4
C Java Parameter zum starten ohne auf Programmende zu warten Allgemeine Java-Themen 4
D Ich ikann kein Java-Programm starten Allgemeine Java-Themen 10
M Java-Anwendungen so anbieten, dass sie jeder starten kann ;) Allgemeine Java-Themen 19
T Mit java externes Programm starten Allgemeine Java-Themen 4
X Office von Java aus starten Allgemeine Java-Themen 5
D FindBugs oder CheckStyle aus Java-Programm starten Allgemeine Java-Themen 2
T CheckStyle, JUnit und FindBugs aus Java-Programm starten Allgemeine Java-Themen 2
V java programm bzw. teilprogramm automatisiert starten Allgemeine Java-Themen 3
A Java-Applikation auf einem anderen Rechner starten Allgemeine Java-Themen 17
S Java beim Rechnerstart starten Allgemeine Java-Themen 17
G Jar aus Java-Programm starten Allgemeine Java-Themen 4
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
L java programm läßt sich von website nicht starten. Allgemeine Java-Themen 6
L linux befehl aus java programm starten Allgemeine Java-Themen 7
M Zweiten Prozess in Java starten! Allgemeine Java-Themen 5
Y Aus einem Java Programm andere (Exe-)Programme starten Allgemeine Java-Themen 3
M Java Anwendunng per *.bat starten -> Fehler / In Eclipse Allgemeine Java-Themen 2
P Java --> Anwendungen Starten/Schließen Allgemeine Java-Themen 10
H java Programme als batch starten Allgemeine Java-Themen 13
S java Programme über Konsole starten Allgemeine Java-Themen 5
S ausführbare Datei aus Java-Programm starten Allgemeine Java-Themen 2
L Windows-Anwendung aus Java-Programm starten Allgemeine Java-Themen 2
L Java Applikation über Netzwerk starten Allgemeine Java-Themen 8
M externes Programm aus Java heraus starten Allgemeine Java-Themen 2
T Anwendung von Java aus starten Allgemeine Java-Themen 3
C Probleme beim Starten eines Java-Programms Allgemeine Java-Themen 2
E Java aus C++ starten Allgemeine Java-Themen 5
F Dienst via Java Starten/Stoppen Allgemeine Java-Themen 10
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben