Toon posts:

[JAVA] Virtual machine laten draaien,terwijl programma sluit

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraag waar ik niet makkelijk uit kom.
Heb al gezocht, maar mocht weinig baten.


Runtime.getRuntime().exec("PoepInJehoofd.bat");
System.exit(0);


In die batchfile wordt er een ander java programma gelanceerd. Alleen het probleem is dat hij dus niet lanceert. Wel als ik er gewoon in windows erop klik, maar niet als ik het in Java doe.
Dit komt omdat hij met System.exit(0) de JVM vernietigd.

Ik wil er dus voor zorgen dat de applicatie zelf afgesloten wordt. En vervolgens met die batchfile de applicatie start. Enkel doordat de JVM afgesloten wordt, vernietigt hij de JVM voor de batchfile.
Is het mogelijk de JVM door te laten draaien? En de app waarin die batchfile wordt aangeroepen af te sluiten? Zodat dus die andere start?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
JVM sharing is (nog) niet mogelijk in java. Dit wordt waarsch. beschikbaar in Java 1.5

Wat dat dus betekend is dat jouw 2de java applicatie helemaal niet in dezelfde JVM als de application die hem start. Wat er gebeurd waarschijnlijk is dat de bat NIET opstart als hij geen screen heeft (check ff in je JVM opties, dacht dat het -d noscreen was oid ) of dat bij het sluiten van de eerste JVM, je tweede ook mee gaat (beetje raar imho). Je moet dan je eerste applicatie laten wachten tot je tweede klaar is :)

Juist, na ff wat zoekwerk (zoeken op exec en wait op http://search.java.sun.com ) kwam ik er achter dat exec dus een proces opstart in een andere thread :) Je commando wordt dus asyncroon gerunt, waardoor jouw programma niet op het commando gaat wachten.

Wat je moet doen is het volgende: Api docs Process

Java:
1
2
3
4
5
6
7
8
Process hotShit = Runtime.getRuntime().exec( "DoHotShit.bat" );
try { 
    hotShit.waitFor( );
} catch ( InterruptedException ie ) {
    //code for interruption of main thread
    //
}
System.exit(0);

Verwijderd

Topicstarter
Hoop dat je wat erop kunt vinden

Ik kom er niet echt uit :/
Ben nu de specificatiedocument van de virtualmachine aan het doorlezen. Misschien dat ik door middel van het doorgeven van een parameter een tweede jvm kan laten starten

En dat laten wachten tot de tweede klaar is, is een probleem. Want er komt wel een zwart scherm tevoorschijn. Maar eer die reageert heeft de gebruiker een baard :(

Als ik de batchfile in windows executeer start het gewoon snel op. En als ik die system.exit(0) wegaal zie je enkel een zwart scherm. 26 seconden lang. En vervolgens komt er geen nieuwe jvm tevoorschijn. Vaag :'(

Was overgens even bang dat ik een n00bvraag ging stellen :P (misschien is dat deze vraag ook nog wel hehe)

// edit:

bedankt! Ga het meteen uitproberen

Verwijderd

Topicstarter
Jammer genoeg doet hij het niet :( Zelfde effect als boven beschreven. Misschien ligt het aan de batchfile. Dat die een parameter te weinig heeft. Maar hij executeert wel wanneer ik in windows erop klik.

F:\JBuilder6\jdk1.3.1\bin\javaw -classpath "F:\Documents and Settings\RoWe\Bureaublad\Huiswerk\Centrale_Administrtie\Centrale_Administrtie\classes;F:\JBuilder6\jdk1.3.1\demo\jfc\Java2D\Java2Demo.jar;F:\JBuilder6\jdk1.3.1\jre\lib\i18n.jar;F:\JBuilder6\jdk1.3.1\jre\lib\jaws.jar;F:\JBuilder6\jdk1.3.1\jre\lib\rt.jar;F:\JBuilder6\jdk1.3.1\jre\lib\sunrsasign.jar;F:\JBuilder6\jdk1.3.1\lib\dt.jar;F:\JBuilder6\jdk1.3.1\lib\htmlconverter.jar;F:\JBuilder6\jdk1.3.1\lib\tools.jar" centrale_administratie.CentraleAdministratie


Moet misschien een parameter op het eind meegeven. Zodat die een tweede JVM ernaast runt. Want dat schijnt die niet leuk te vinden. Ik probeer nog een keer de jvm specificatie door te spitten op zoek naar een oplossing.
Hij wil gewoon die tweede JVM niet starten als een nieuw proces :'(

Verwijderd

Probeer het eens met het volgende in je bat bestand:

start F:\JBuilder6\jdk1.3.1\bin\javaw -classpath "F:\Documents and Settings\RoWe\Bureaublad\Huiswerk\Centrale_Administrtie\Centrale_Administrtie\classes;F:\JBuilder6\jdk1.3.1\demo\jfc\Java2D\Java2Demo.jar;F:\JBuilder6\jdk1.3.1\jre\lib\i18n.jar;F:\JBuilder6\jdk1.3.1\jre\lib\jaws.jar;F:\JBuilder6\jdk1.3.1\jre\lib\rt.jar;F:\JBuilder6\jdk1.3.1\jre\lib\sunrsasign.jar;F:\JBuilder6\jdk1.3.1\lib\dt.jar;F:\JBuilder6\jdk1.3.1\lib\htmlconverter.jar;F:\JBuilder6\jdk1.3.1\lib\tools.jar" centrale_administratie.CentraleAdministratie

Het start commando zou (als het goed is) een apart process moeten starten in je windows shell, dat ook na het sluiten van de JVM actief blijft. System.exit(0) terminate trouwens botweg de VM, alle threads worden geinterupt en alles ligt in puin :X

Waarom wil je eigenlijk vanuit de ene JVM een nieuwe opstarten? :?

Verwijderd

(waar is m'n edit knop?)

ps 1: misschien moet je er nog call voor zetten (dus call start blabla) zodat het batch bestand gewoon kan eindigen.

ps2: je kunt waarschijnlijk ook het start commando direct starten met Runtime.getRuntime().exec(), bespaart je weer die batch file

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom open je m niet gewoon in dezelfde VM?
Het is een java programma, dus je kunt m gewoon opstarten dmv de main methode aan te roepen (desnoods expliciet inladen met Class.forName ())

Je zit dan natuurlijk wel met de classpath die gelijk moet zijn... of kun je die in de VM aanpassen?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik heb het probleem al opgelost door hetgeen wat in de batchfile staat simpelweg als parameter op te geven.

Runtime.getRuntime().exec("heeldatstuktekstvanhierboven");
System.exit(0);

Hij sluit af, en start een nieuwe JVM.

Enkel ik blijf het vreemd vinden dat die het niet doet als je het via een batchfile opstart. JVM maakt waarschijnlijk tegelijkertijd gebruik van command. Waardoor die meevernietigd wordt.
websjwans schreef op 16 oktober 2002 @ 01:31:
Waarom wil je eigenlijk vanuit de ene JVM een nieuwe opstarten? :?
Omdat ik een blonde noobprogrammeur ben :)
Wist niet dat je met runtime ook parameters mee kon geven aan de app (javaw). Schijnbaar wel dus

Heb het met start nog niet geprobeerd, maar het zal ongetwijfeld werken.

  • nxt
  • Registratie: November 2001
  • Laatst online: 26-08 13:51

nxt

Verwijderd schreef op 16 oktober 2002 @ 05:09:
Ik heb het probleem al opgelost door hetgeen wat in de batchfile staat simpelweg als parameter op te geven.
....
Enkel ik blijf het vreemd vinden dat die het niet doet als je het via een batchfile opstart. ....
ik ken 't probleem
maar meestal is dit op te lossen door
in plaats van
code:
1
Runtime.getRuntime().exec("iets.bat")

het volgende
code:
1
Runtime.getRuntime().exec("cmd/c iets.bat");

te doen
en op win9x natuurlijk command ipv cmd
Pagina: 1