Toon posts:

[java] extern java prog starten binnen java code

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik weet dat je een extern programma in java kan starten m.b.v. java.lang.Runtime.exec("programma naam"). Nu wil ik echter een ander java programma starten Dat in principe niet stopt. Hier zit dus ook het probleem. Na het aanroepen van java.lang.Runtime.exec programma blijft hij dus in dit programma zitten terwijl ik graag zou willen dat hij dit programma runt, en tevens verdergaat met het uitvoeren van de verdere code van het "aanroep" programma. Is daar een mogenlijkheid voor?

Stuk code dat het externe programma aanroept:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Runtime rt = Runtime.getRuntime();
        try
        {
            serverProcess = rt.exec(System.getProperty("user.dir") +"\\startServer.bat");
            InputStream stderr = serverProcess.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            System.out.println("<ERROR>");
            while ( (line = br.readLine()) != null)
                System.out.println(line);
        }
        catch (Exception e)
        {
            System.out.println("Exception: " + e);
        }

Even voor de duidelijkheid. Het bestand startServer start dus een nieuw java programma

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hum, ik weet niet precies wat je wilt: Je applicatie draait in een JVM. Als je de andere applicatie start in een andere JVM kan je in principe gewoon de huidige applicatie beeindigen.

Als je hem echter in dezelfde JVM start is het beeindigen van je eerst applicatie een beetje een onduidelijke notie: als je de andere applicatie in een aparte Thread start zal de eerste applicatie stoppen, maar de JVM zal blijven bestaan omdat er nog een thread aktief is.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Oh wacht, ik zie nu beter wat je bedoelt: je start inderdaad een andere VM....

Je doet echter ook dit:
code:
1
2
while ( (line = br.readLine()) != null)
     System.out.println(line);

Je gaat dus de InputStream van de andere JVM gebruiken en daarom blijft de aanroepende applicatie draaien. Als je van die inputstream afblijft is er geen probleem denk ik :) .

edit: input <-> ouput ;)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Het zit dus zo:
Ik heb een programma dat kijkt of er op het lokale netwerk al een server draait, zo ja dan wordt daarop ingelogd. Zo nee, dan moet er zelf een server gestart worden. Ik dacht dat dus te doen met Runtime.exec.. Maar dan wordt alleen de server gestart en blijft hij daar dus in hangen. Hij moet echter nog verder gaan en de client naar de server laten connecten...

Verwijderd

Topicstarter
Je hebt helemaal gelijk, hij werkt nu. Heel logisch ook eigenlijk, stom dat ik daar zelf niet aan gedacht heb...
Bedankt!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
sensei1: hij werkt nu.
Mooi, graag gedaan :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1