# Java Programm aus anderen Java Programm starten



## Jackii (15. Feb 2012)

Hallo alle.

Ist es möglich ein Java Programm aus ein anderen Java Programm per Button klick zu starten???

Ich benutze Netbeans.
Ich möchte 2 Projekte erstellen und aus dem 1. Projekt das 2. Projekt per Button klicken starten.

MfG
Jackii


----------



## Michael... (15. Feb 2012)

Ja. Wenn beide in der selben JVM laufen dürfen/sollen muss man ja nur die "Start" Methode aus dem 2. Projekt aufrufen bzw. das "Start" Objekt (z.B. den JFrame) erzeugen. Bedingung beide Projekte bzw. deren Klassen sind im CLASSPATH eingetragen.
Soll das zweite Programm in einer eigenen VM laufen müsste man mit Runtime.exec(...) das Programm so starten wie man es von der Konsole aus starten würde.


----------



## Jackii (15. Feb 2012)

Könntest du mir ein Beispiel schicken wie ich die "Start" Methode aus dem 2. Projekt aufrufen kann.
Beide Projekte laufen im gleichen JVM.
Und wie kann ich die Projekte im classpath eingetragen?


----------



## Michael... (15. Feb 2012)

Könnte man dann der Einfachheit halber dann nicht beide Projekte in ein gemeinsames stecken?
Eine Möglichkeit wäre einfach die main des  zweiten Projektes aufzurufen.

```
HauptKlasseAusProjektZwei.main(null);
```
Benutze kein Netbeans - hab daher auch keine Ahnung wie man hier Klassen aus einem anderen Projekt einbindet (in Eclipse nennt sich das Build Path)


----------



## Jackii (15. Feb 2012)

Danke schonmal. Ich probiert das jetzt mal aus.



Michael... hat gesagt.:


> Könnte man dann der Einfachheit halber dann nicht beide Projekte in ein gemeinsames stecken?


Leider bekomme ich da eine NullPointerException wegen BufferStrategy und da mir keiner weiterhelfen kann probier ich das so -.-

Leider funktionier das mit Netbeans nicht und ich habe leider auch nichts im Inet gefunden -.-
Weißt du vllt eine andere Lösung??


----------



## André Uhres (15. Feb 2012)

Über "Project Properties | Categories:Libraries | Compile:Add Project..." können wir ein NetBeans-Projekt hinzufügen. Danach können wir das hinzugefügte Projekt mit "Main.main(null)" starten (falls die Hauptklasse "Main" heißt, ansonsten den verwendeten Namen angeben).

Gruß,
André


----------



## Jackii (15. Feb 2012)

Irgendwie bekomm ich das nicht hin -.-
Das mit dem einbinden hab ich gemacht.

Ich schreib mal auf was ich so hab:

Das erste Projekt heißt: *Javio*
Dort gibt es in den Quellpaketen ein Package das *Menu* heißt, dort will ich die Klasse *KeyConfig.java *aufrufen um das Spiel zu starten.

Das zweite Projekt heißt: *StartBild*
Dort will ich aus der Klasse *StartBild.java* die Klasse KeyConfig aufrufen.

Ich hab schon versucht mit _Menu.KeyConfig(null);_ die KeyConfig aufzurufen...er kennt KeyConfig dann nicht.


----------



## Michael... (15. Feb 2012)

Jackii hat gesagt.:


> Irgendwie bekomm ich das nicht hin -.-
> Das mit dem einbinden hab ich gemacht.
> 
> Ich schreib mal auf was ich so hab:
> ...


Wie die Projekte heißen ist wurscht, das ist eine Netbeans interne Sache. Wichtig ist, das die Klassen aus dem einen Projekt (Javio) auch im anderen Projekt (StartBild) angezogen werden können (muss in Netbeans eingestellt werden)

Ist KeyConfig die Hauptklasse und enthält *die*

```
static main(String[])
```
 zum Starten der zweiten Applikation?  dann KeyConfig.main(null). Den von Dir aufgerufenen Konstruktor wird es wohl nicht geben und wenn doch, dann wird er mit null nicht viel anfangen können.


----------



## Jackii (15. Feb 2012)

Michael... hat gesagt.:


> Ist KeyConfig die Hauptklasse und enthält *die*
> 
> ```
> static main(String[])
> ...



Ja die KeyConfig enthält die static main(String[])


----------



## Paddelpirat (15. Feb 2012)

Vielleicht liege ich ja falsch, aber es hört sich nach der falschen Technik an. Bei dem Klassennamen Startbild, würde ich mal raten, dass ein Splashscreen besser wäre als zwei Projekte miteinander zu verknüpfen.

How to Create a Splash Screen (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features)


----------



## Jackii (15. Feb 2012)

Das mit dem Splash Screen ist ja eine tolle Idee aber ich möchte gerne Buttons drücken können.

Der Startbildschirm funktionier ja... wenn ich das Spiel starte wird das Frame von Startbildschirm geschlossen und das Spielframe wird gezeichnet aber nicht ganz...ich bekomme wegen dem BufferStrategy ein Bluescreen.


----------



## Michael... (15. Feb 2012)

Du vermischt hier gerade zwei Threads ;-)
Was ist wenn Du für den Startbildschirm auch mit AWT machst?
Und wenn es hier tatsächlich nur um einen spezifischen Startbildschirm für ein Spiel handelt warum legst Du das Projekt nicht zusammen?


----------



## Paddelpirat (15. Feb 2012)

Hmm, habe auch gerade deinen anderen Thread gesehen mit dem Swing und AWT mischen. Hat dein Startbildschirm die gleiche Größe, wie dein eigentliches Spiel? Vielleicht solltest du einfach beide Projekte in eins überführen und die GUI einheitlich in Swing schreiben. Dann könntest du für deinen Startbildschirm und dein Spiel jeweils ein JPanel verwenden und zwischen den beiden JPanels hin und her wechseln indem zu z.B. das CardLayout verwendest.

How to Use CardLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container) 

Ist natürlich alles ein bisschen mehr Aufwand, aber es ist sicherlich eine elegantere und weniger fehleranfällige Variante.


----------



## specialize (16. Feb 2012)

Hallo, ich häng mich hier mal an die ursprüngliche Frage an:

Wie kann ich ein Java Programm aus einem Java Programm starten?


```
ProcessBuilder prcbTw = new ProcessBuilder("java","Proggi");
prcbTw.directory(new File(System.getProperty("java.home")));									
Process prcTw = prcbTw.start();
```

Habs auch schon versucht mit dem Pfad der .java Datei usw.


----------



## L-ectron-X (16. Feb 2012)

Hast es nicht mitbekommen?
Rufe die main()-Methode des zweiten Programms auf.


----------



## bygones (16. Feb 2012)

gibt es keine API die genutzt werden kann um die andere Applikation anzusprechen ?

der Aufruf der main Methode klingt n bisschen nach Holzhammermethode...


----------



## Marcinek (17. Feb 2012)

Nein. Das mit dem Prozess builder ist schon der richtige weg. Aber wenn man keine Fehlermeldung postet oder drumherum die Aktivität beschreibt, dann frage ich mich wie man hier helfen soll.


----------



## L-ectron-X (17. Feb 2012)

bygones hat gesagt.:


> der Aufruf der main Methode klingt n bisschen nach Holzhammermethode...


Warum? Der Aufruf von Methoden gehört doch zum normalen Leben in Java. Um ein Java-Programm zu starten wird immer die main()-Methode aufgerufen. Warum also nicht auch auch in einem Java-Programm, wenn man ein anderes Java-Programm starten möchte?
Der ProcessBuilder kommt dann ins Spiel, wenn eine Kommunikation beider Programme miteinander benötigt wird.


----------



## bygones (17. Feb 2012)

L-ectron-X hat gesagt.:


> Warum? Der Aufruf von Methoden gehört doch zum normalen Leben in Java. Um ein Java-Programm zu starten wird immer die main()-Methode aufgerufen. Warum also nicht auch auch in einem Java-Programm, wenn man ein anderes starten möchte?


fuer mich zaehlt die main methode einfach nicht zur API. Wenn ich aus einem Programm ein anderes nutzen will, so nutze ich die API. Wenn ich ein anderes Programm in einer anderen VM starten will vielleicht, aber wenn man sich nochmal den ausgangspost anschaut


> Hallo alle.
> 
> Ist es möglich ein Java Programm aus ein anderen Java Programm per Button klick zu starten???
> 
> ...


klingt es eher nach "fuege das eine Projekt in den Classpath des anderen und nutze die API" anstatt ueber ProcessBuilder die main zu rufen.....


----------



## L-ectron-X (17. Feb 2012)

Niemand hat gesagt, dass über den ProcessBuilder die main()-Methode aufgerufen werden soll.
Die main()-Methode eines Java-Programms kann auch so erfolgen, wie das von Michael... oben gezeigt wurde - also ohne ProcessBuilder. Das erscheint mir als der einfachste Weg.


----------



## bygones (17. Feb 2012)

ach lol - da hat sich ja einer eingehaengt mit einer anderen frage....


----------

