X11 mit source von Java aus starten

D

dideldum

Neues Mitglied
Thread Starter
Dabei seit
04.01.2007
Beiträge
15
Reaktionspunkte
0
Hi,

der Start von X11 aus Java geht wie folgt:

Runtime.getRuntime().exec( new String[]
{ "open", "/Applications/Utilities/X11.app"
});


IN der X11-Konsole kann ich dann eine Batch-Datei aufrufen mit

source batch-txt

Wie kann ich obige beiden Schritte kombinieren?
D.h. X11 mit der Batch-Datei zusammen von Java aufrufen???

Für jede Hilfe wäre ich super-dankbar :confused:

Thomas
 
vielleicht geht sowas mit AppleScript, welches sich über osascript an der Shell ansprechen lässt.
Leider kenn ich mich da nicht gut genug aus, aber über die GUI-Skripting Komponente müsste das gehen.

Ist aber ziemlich umständlich, wofür brauchst du das denn?
 
Hi Danke für das Mail.

Also ich habe einen Befehl:

mono mccrypt.exe Mandant /config 123456789.xml /log 123456789.log

(Microsoft DotNet-Applikation mit mono auf dem Mac)

Der funktioniert prima wenn ich in in X11 manuell eingebe.

Aber eigentlich soll das alles aus dem Java Programm funktionieren.

Aus dem Java-Programm schaffe ich aber nur X11 aufzurufen.

Daher dachte ich vielleicht mit dem source-Befehl?
Aber der funktioniert auch nur wenn ich ihn manuell in X11 eingebe.

Bin schon kurz vor dem durchdrehen :mad:

Viele Grüße
Thomas
 
mit OutputStream in X11 schreiben von Java aus

Ja das wäre wirklich klasse.
Nur scheint das auch nicht zu funktionieren:

Jedenfalls bringt folgender Sourcecode keine Reaktion, ausser dass X11 gestartet wird:

Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();

BufferedWriter out =new BufferedWriter(
new OutputStreamWriter( proc2.getOutputStream() ) );
out.write("mono ...");
out.newLine();

try { out.flush(); out.close(); } catch (Exception ex){ex.printStackTrace(); }


und eine Exeption bei flush:
java.io.IOException: Broken pipe
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)

Zum weinen :confused:
 
das kann auch gar nicht funktionieren, da nicht X11 das Programm ausführt,
wenn du es in xterm eintippst, sondern eine Shell (bei mir die Bash),
die den Befehl interpretiert und ausführt.

Probier mal:
Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();


Process procBash = Runtime.getRuntime().exec(new String[]{
"/usr/bin/bash"});
procBash.waitFor();

BufferedWriter out =new BufferedWriter(
new OutputStreamWriter( procBash.getOutputStream() ) );
out.write("mono ...");
out.newLine();
out.flush();

vielleicht geht, ich kann es allerdings nicht garantieren.
 
bash nicht da

Hi ybasket,

das hört sich super-klasse an.
Aber bash habe ich wohl nicht.
Auch nicht das Verzeichnis /usr/bin/bash

Gibt es Alternativen?
mein Rechner ist absolut Standard-installiert : Intel Core Duo Mac OS X 10.4.8.

:eek:

Vielen Dank!!!
 
Der Pfad zur bash ist /bin/bash.
 
mit dem OutputStream unter java die Eingabe von Xterm in X11

ok, mit

Process procBash = Runtime.getRuntime().exec(new String[]{
"open",
"/bin/bash"});
procBash.waitFor();


öffnet sich das bash-Terminal.

Obiger Source scchreibt hier aber nichts rein. Also keine weitere Reaktion.

Manuelle Eingabe in das bash-Terminal führt leider auch zu einem Fehler.

D.h. ich müsste statt der bash irgendwie mit dem OutputStream unter java die Eingabe von Xterm in X11 erreichen. Nur da funktioniert mein Aufruf.

Was habe ich mir da nur ausgesucht.... :confused:
 
Eingabe in XTerm von Java aus

Hmmm, scheint irgendwie ein Ding der Unmöglichkeit zu sein - oder?
Dabei ist es auf Windows so einfach.
Oder mach ich alles verkehrt???:cake:
 
Zuletzt bearbeitet:
Mit Java in XTERM Befehle absetzen

:confused: :confused: :confused: :confused: :confused: :confused:

Hmmm, weiss wirklich niemand, wie man mit Java in XTERM Befehle absetzt?

:confused: :confused: :confused: :confused: :confused: :confused:
 
man xterm | less "+x/-e program"
 
Xterm von Java aus starten mit Eingabe

moses_78 schrieb:
man xterm | less "+x/-e program"


Hmm, da steht was über Java drin??? :eek:
 
Da steht überhaupts nichts zu Java drin.

Aber was hintert dich denn daran, erst von Java aus den X11-Server
zu starten, und dann ein neues Xterm zu öffnen, in dem mit den Flag
-e ein weiteres Programm gestartet wird?

Das heisst, zuerst müsste
open /Applications/Utilities/X11.app

und dann
xterm -display :0.0 -e "<Hier kommt dein Shellbefehl rein>"

ausgeführt werden. Klappt bei mir beides ohne Probleme.
 
X11/Xterm von Java aus starten UND von Java aus Eingaben machen

so vielleicht:

Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();

Process procBash = Runtime.getRuntime().exec(new String[]{
"xterm",
"-display :0.0",
"-e \"cd /Applications\"" });
procBash.waitFor();

Das gibt leider eine Exception: java.io.IOException: xterm: not found

Wohlgemerkt: ich muss X11/Xterm von Java aus starten UND von Java aus Eingaben machen.

Am Boden zerstört :confused: :confused: :confused: :confused: :confused: :confused:
 
mit Java in xterm schreiben

der hier tut leider auch nicht:

Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();

BufferedWriter out =new BufferedWriter(
new OutputStreamWriter( proc2.getOutputStream() ) );
out.write("xterm -display:0.0 -e \"cd /Applications\"");
out.newLine();
out.flush();



liefert:
java.io.IOException: Broken pipe:eek:
 
der Pfad für xterm ist /usr/X11R6/bin/xterm, damit müsste es dann gehen.

Notfalls schreib halt ein passendes Shellskript, welches die Befehle bündelt und
sich über Runtime.exec("/bin/bash skript.sh") ausführen lässt.
 
von Java aus Xterm benutzen

Folgendes Java-Programm liefert die Meldung
java.io.IOException: Broken pipe


Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();

BufferedWriter out =new BufferedWriter(
new OutputStreamWriter( proc2.getOutputStream() ) );
out.write("/usr/X11R6/bin/xterm -display:0.0 -e \"cd /Applications\"");
out.newLine();
out.flush();



Folgendes Java-Programm liefert die Meldung ( egal ob mit oder ohne open in proc3):
java.io.IOException: open /usr/X11R6/bin/xterm -display:0.0 -e "cd /Applications": not found

Process proc2 = Runtime.getRuntime().exec(new String[]{
"open" , "/Applications/Utilities/X11.app"});
proc2.waitFor();

Process proc3 = Runtime.getRuntime().exec(new String[]{
"open /usr/X11R6/bin/xterm -display:0.0 -e \"cd /Applications\""
});



Folgendes Script liefert (mit /bin/bash script.sh in Xterm aufgerufen):
2007-01-13 09:39:09.427 open[3917] No such file: /Applications/-e

open /Applications/Utilities/X11.app
open /usr/X11R6/bin/xterm -display:0.0 -e "cd /Applications"


ich geh jetzt wieder in meine Ecke.
 
dideldum schrieb:
Folgendes Script liefert (mit /bin/bash script.sh in Xterm aufgerufen):
2007-01-13 09:39:09.427 open[3917] No such file: /Applications/-e

open /Applications/Utilities/X11.app
open /usr/X11R6/bin/xterm -display:0.0 -e "cd /Applications"

es müsste heißen:

open /Applications/Utilities/X11.app
/usr/X11R6/bin/xterm -display:0.0 -e "cd /Applications"
,
da sonst -display:0.0 -e "cd /Applications" an open und nicht an
xterm übergeben wird.
 
dann mäkelt er den Parameter -display an

das funktioniert alles nicht.

ich schmeiss meinen Mac in die Ecke.
 
Zurück
Oben Unten