[Java] Executable path + naam opvragen

Pagina: 1
Acties:

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Ik ben op zoek naar code om het pad + bestandsnaam van de executable op te vragen.

In C# zou ik dit doen:
C#:
1
2
3
4
5
6
String path = Application.StartupPath;
for (int i = 1; i <= 5; i++)
{
    Process p = new Process(path);
    p.start();
}


Ik kan echter in Java geen functie vinden die hetzelfde voor mij doet.

Het doel van het programma is het 5x opstarten van het huidige programma met verschillende parameters, als er geen parameters gegeven zijn. Daar wil ik dus het liefst een variabele die ergens door Java gedefinieerd is voor gebruiken i.v.m. portability. Nouja, het moet ook gewoon kunnen want in C# kan het ook.

Ik gok overigens dat ik dan wel "javap pad\bestand.java" moet opstarten en niet gewoon bestand.exe of zo.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 16-09 18:57
Googlen op:
http://www.google.nl/sear...q=java+get+execution+path

Levert vaak op:
Java:
1
String executionPath = System.getProperty("user.dir");


Zelf niet getest, maar de bronnen op internet beweren dat dit het huidige executiepad teruggeeft.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Het doel van het programma is het 5x opstarten van het huidige programma met verschillende parameters, als er geen parameters gegeven zijn.
Als dat je doel is dan ben je imho wel met een behoorlijk smerige workaround bezig. Als het van belang is om het 5x naast elkaar te kunnen draaien dan lijkt het me veel voor de hand liggender om eens naar threads te kijken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
user.dir werkt inderdaad, maar ik krijg dan het pad waar de "src"-map in staat.

Dan kan ik nog steeds niet vinden waar het programma dan staat etc.
Janoz schreef op donderdag 19 november 2009 @ 19:26:
[...]

Als dat je doel is dan ben je imho wel met een behoorlijk smerige workaround bezig. Als het van belang is om het 5x naast elkaar te kunnen draaien dan lijkt het me veel voor de hand liggender om eens naar threads te kijken.
Dat is in dit geval nou net niet de bedoeling...

[ Voor 57% gewijzigd door Tanuki op 19-11-2009 19:28 ]

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik ben erg benieuwd naar het waarom. De oplossing die je namelijk probeert te doen is, om het nog even zachtjes uit te drukken, nogal fout gevoelig en erg omslachtig vergeleken met andere mogelijkheden. Het executie pad hoeft bijvoorbeeld helemaal neit hetzelfde te zijn als de directory waarin je java class staat...

[ Voor 22% gewijzigd door Janoz op 19-11-2009 21:26 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Janoz schreef op donderdag 19 november 2009 @ 21:25:
Ik ben erg benieuwd naar het waarom. De oplossing die je namelijk probeert te doen is, om het nog even zachtjes uit te drukken, nogal fout gevoelig en erg omslachtig vergeleken met andere mogelijkheden. Het executie pad hoeft bijvoorbeeld helemaal neit hetzelfde te zijn als de directory waarin je java class staat...
Tja, het is een schoolopdracht. Daar kan ik dus niks aan aanpassen.

Het is de bedoeling dat 5 (dezelfde) programma's tegelijk aan 1 bestand gaan werken door replaces te doen in het bestand. En het moet echt op die manier en niet met threads (staat nadrukkelijk in de opdracht).

Nou is op zich de opdracht niet zo heel erg van belang voor mijn vraag. Als ik hier kwam om mijn huiswerk te laten maken door mede GoT'ers had ik wel andere vragen gesteld. Vragen die er voor zorgen dat ik mijn huiswerk af krijg.

Het grote probleem is gewoon dat je in C# makkelijk Application.StartupPath kunt doen en volgens mij zat er in Application nog iets anders waarmee je de filename op kon vragen en zo dus makkelijk kan uitvinden waar je programma nou eigenlijk staat.

In Java krijg ik dat maar niet voor elkaar. Ik wil gewoon simpelweg het programma 5x opstarten (met elke keer andere parameters). En ik wil het pad er niet hardcoded in zetten. Als ik dat wel doe werkt het.

Ik had gewoon verwacht dat het iets simpels was dat je in Java op kon vragen. Blijkbaar valt dat vies tegen. :)

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het zit hem in het verschil tussen hoe een Java programma en een .Net programma worden opgestart. Dat het jou vies tegenvalt is natuurlijk jammer, maar je zult het feit dat er verschillen zijn toch moeten accepteren. Weet je zeker dat het 5x opstarten mvb Java de opdracht is, of is dat jouw interpretatie?

Hoe dan ook, hier wordt uitgelegd hoe je het eventueel voor elkaar kunt krijgen:
http://www.velocityreview...ectory-of-my-program.html

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Voor de simpele gevallen is dit niet zo moeilijk:
Java:
1
2
3
4
5
6
7
8
class Restart {
    public static void main(String argv[]) throws Exception {
        if (argv.length>0) return;
        Process p = Runtime.getRuntime().exec(
            System.getProperty("java.home") + "/bin/java -cp " + 
            System.getProperty("java.class.path") + " Restart done");
    }
}

Enkel houdt dit geen rekening met dingen als andere aanroepingen, andere paden, java command line opties en ClassLoaders. Nog belangrijker: om de output netjes naar stderr en stdout te krijgen en het programma niet potentieel te laten vastlopen zijn er per process 2 threads nodig in java! Brilliant, toch, om alleen die onderliggende system calls in de api te hebben (ook ProcessBuilder wil juist capturen). ;)

Met andere woorden: het lijkt me duidelijk dat dit gewoon niet de bedoeling is in java. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1