[SOLVED] TProcess + Java | Parameter nicht richtig genutzt ?

Für Fragen von Einsteigern und Programmieranfängern...
mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

ok, jetzt spammt er fleißig Punkte ins Memo ;)

Dafür schonmal danke :)

Nur fehlt mir immernoch der Output der Konsole :/

aber ich bin sicher, dass schaffe ich mit eurer Hilfe auch noch :)
MfG

EDIT: gerade deine Hello.jar aus deinem TestJava.zip als
jarFile genommen, da klappts :/
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von Michl »

mark332 hat geschrieben:ok, jetzt spammt er fleißig Punkte ins Memo ;)

Dafür schonmal danke :)

Nur fehlt mir immernoch der Output der Konsole :/

aber ich bin sicher, dass schaffe ich mit eurer Hilfe auch noch :)
MfG

EDIT: gerade deine Hello.jar aus deinem TestJava.zip als
jarFile genommen, da klappts :/
Nun bin ich mit meinem Latein am Ende, da ich nicht weiss, was du mit javaPath bzw. serverPath aufrufst bei:

Code: Alles auswählen

        javaProcess.Executable := '"'+javaPath+'"'; //kann man sich denken ;)
        javaProcess.Parameters.Add('-jar');
        javaProcess.Parameters.Add('"'+serverPath+'"'); // Pfad zur .jar
        javaProcess.Parameters.Add('nogui');//java soll die gui-anwendung nicht extern öffnen sondern deren Output als eigenen Output nehmen... 
Eigentlich müssen die Prameter genauso sein, wie bei der Anzeige auf der Konsole. Evtl. mal "nogui" weg lassen, glaube aber daran liegts nicht...

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Hmm... gerade gemerkt, dass, wenn ich nogui, poUsePipes, und swoHide weglasse,
sich die java-konsole und auch das standart-gui der .jar :/

Könnte es evtl. daran liegen, dass der Output im Grunde zweimal umgeleitet werden würde ?
( JavaGui->JavaKonsole->MyProgram)
Ich hänge die .jar hier mal an:
Dateianhänge
Tekkit.zip
(Minecraft-TekkitMain Server)
(1.86 MiB) 90-mal heruntergeladen
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von Michl »

Mal so probiert (wirft bei mir keine Exception, sondern startet):

Code: Alles auswählen

        javaProcess.Executable := 'java';
        javaProcess.Parameters.Add('-Xmx3G');
        javaProcess.Parameters.Add('-Xms2G');
        javaProcess.Parameters.Add('-jar');
        javaProcess.Parameters.Add('tekkit.jar'); // Pfad zur .jar 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Starten tut es ja alles, nur irgendwie kommt nichts im Memo an, da laut NumBytesAvaliable keine Bytes im Stream sind ?!?

Im übrigen, der server startet nicht nur, man kann auch ohne Probleme darauf spielen :/ d.h. beim Ausführen scheint kein Problem zu sein ...


(Bin jetzt erstmal zum JF-Dienst und um ca. 20:30 wieder da ;) )
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von Michl »

Sorry, kenne mich mit Minecraft nicht aus. Der Start ohne die Parameter hat bei mir eine Exception geworfen, die in der Konsole aber nicht im Memo angezeigt wird. Im Netz habe ich gelesen, dass der Server mittels einer "launch.bat" gestartet wird. Also in dieser mal nachgeschaut, da steht:

Code: Alles auswählen

java -Xmx3G -Xms2G -jar Tekkit.jar nogui
pause
Also habe ich die Parameter so geschrieben und siehe da, der Output kommt im Memo an (ist bei mir aber nur ne Info, dass ich nicht genug Cache habe, will mich da aber jetzt nicht weiter drin vertiefen)!

Lange Rede, kurzer Sinn, eigentlich hättest du das Ganze recht einfach haben können, in dem du einfach die launch.bat als Prozess ausführst:

Code: Alles auswählen

        javaProcess.Executable := 'launch.bat';
        javaProcess.Options := [poUsePipes];
        javaProcess.ShowWindow := swoHide;
        javaProcess.Execute;
mehr kann ich dazu einfach nicht sagen...

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Michl hat geschrieben:Sorry, kenne mich mit Minecraft nicht aus. Der Start ohne die Parameter hat bei mir eine Exception geworfen, die in der Konsole aber nicht im Memo angezeigt wird. Im Netz habe ich gelesen, dass der Server mittels einer "launch.bat" gestartet wird. Also in dieser mal nachgeschaut, da steht:

Code: Alles auswählen

java -Xmx3G -Xms2G -jar Tekkit.jar nogui
pause
Also habe ich die Parameter so geschrieben und siehe da, der Output kommt im Memo an (ist bei mir aber nur ne Info, dass ich nicht genug Cache habe, will mich da aber jetzt nicht weiter drin vertiefen)!

Lange Rede, kurzer Sinn, eigentlich hättest du das Ganze recht einfach haben können, in dem du einfach die launch.bat als Prozess ausführst:

Code: Alles auswählen

        javaProcess.Executable := 'launch.bat';
        javaProcess.Options := [poUsePipes];
        javaProcess.ShowWindow := swoHide;
        javaProcess.Execute;
mehr kann ich dazu einfach nicht sagen...
Ist natürlich eine Möglichkeit, mein Wunsch ist es aber eigentlich, ein Programm zu erstellen, dass sowohl auf Windows, als auch auf Linux läuft ...
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Ich habe mal versucht, das ganze mit einer .bat auszuführen, und dabei folgendes festgestellt:

Der output kommt genau richtig ins Memo, so wie es auch soll.
Bis zu dem Zeitpunkt, an dem java gestartet wird, danach ist nichts mehr mit Output ?!?
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von Michl »

Wie gesagt, ich kenn mich da nicht weiter aus. So wie´s tönt ist das eher ein Problem mit/von Java.

Weiss auch nicht, ob sich jemand hier im Forum mit Minecraft auskennt?! Evtl. diese hier http://www.lazarusforum.de/viewtopic.php?p=64451?!

Ansonsten, müsstest du evtl. diese Frage in einem Forum dafür nochmal aufrollen?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Was hälst du von der Idee, dass der Output der .jar auf dem Weg zu meinem Programm "verloren" geht.

Also im Grunde: (ich durfte das iwie nicht posten ?!?)
http://hastebin.com/lecarufede.coffee

Also, dass der Output der .jar, nach der letzten Konsoleninstanz einen Weg geht,
den es im prinzip nicht soll ?

MfG
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von Michl »

Prinizipiell wäre es möglich, dass durch den internen Aufruf durch Java kein Kindprozess aufgerufen wird, der automatisch die Handles vom Prozess erbt (weiss aber nicht, ob es so ist).

Einzigste Möglichkeit, die mir dazu einfällt ist, dass Java gesagt bekommt, dass es den aktuellen Pipe als den für die Ausgabe nutzen soll. Siehe Bsp: http://de.wikipedia.org/wiki/Pipe_(Informatik)#Beispiel Wie gesagt, dazu kenne ich mich viel zu wenig mit Java aus, ob das so funktionieren könnte und müsste dazu auch erst die Suchmaschine befragen und probieren.

Falls man so nicht an den anonymen Pipe herankommt, weiss ich auch nicht, wie man sonst von außen an die Handles herankäme (named Pipes wäre sogar möglich, aber noch auf Pascal umzumünzen: String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");).
Weitere Infos unter: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Hmm...
ich habe das ganze mal in einem englischen Forum gepostet, vlcht. kennt jemand das Problem ;)

http://forum.lazarus.freepascal.org/ind ... 565.0.html für die, die den verfolgen möchten ;)

Hier einmal ein Dankeschön an dich Michl, dass du mir so fleißig und weit geholfen hast :)
Natürlich auch ein Danke an die anderen, die hier Ideen eingebracht haben :D

MfG

mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von marcov »

Versuche mal einfach weg (auf der Konsole)

etwasjava.bat > bla.txt

kommt der Output dann in bla.txt ?

Wenn nicht versuche mal

etwasjava.bat &> bla.txt

Vielleicht braucht der Java.exe Anruf spezielle Parameter oder so.

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

marcov hat geschrieben:Versuche mal einfach weg (auf der Konsole)

etwasjava.bat > bla.txt

kommt der Output dann in bla.txt ?

Wenn nicht versuche mal

etwasjava.bat &> bla.txt

Vielleicht braucht der Java.exe Anruf spezielle Parameter oder so.
Gute Idee, ich teste das mal kurz :)
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: TProcess + Java | Parameter nicht richtig genutzt ?

Beitrag von mark332 »

Okeey, jetzt bin ich verwirrt ?!?

( genutzt '>test.txt' )
er erstellt die test.txt, diese aber bleibt leer....

MfG


EDIT !!!!:
(bemerkt mit hilfe von http://www.coderanch.com/t/485476/java/ ... utput-file )
Gerade festgestellt, dass der Consolen-output im Error-Output landet und nicht im normalen, wo er eig. hinsoll...
Ich teste das gerade mal, ob das auch für mein Programm zutrifft...

YES !!! poStderrToOutPut hat das Problem gelöst :DDDD *freu*

Ich danke nochmal für eure Hilfe, und hoffe, dass ich den input in die Konsole ohne Hilfe hinbekomme :)
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Antworten