2011-01-12 10 views
2

Ich arbeite an einer Java-Anwendung, die eine andere Anwendung starten muss. Wenn ich die zweite Anwendung unter Verwendung Runtime.getRuntime().exec() starte, wird es der aktive Prozess und sein Fenster kommt vor dem Fenster meiner Anwendung. Was ich wirklich tun möchte, ist den Prozess im "versteckten" Modus zu starten, so dass sein Taskleisteneintrag nicht erscheint und sein Fenster anfänglich unsichtbar ist oder hinter meinem Anwendungsfenster. Dann würde meine Anwendung es sichtbar machen oder es nach vorne verschieben, wenn es gut und fertig ist. Ist das möglich oder frage ich zu viel?Eine mit Fenstern gepackte Anwendung, die von einer Java-Anwendung gestartet wurde, ausblenden?

Dies ist für eine Demo. Ich mache mir also keine Sorgen um Sicherheitsprobleme.

Bearbeiten: Daniels Antwort hat mir eine Idee gegeben. Was passiert, wenn ich Powershell zum Aufruf der Anwendung anstelle von CMD.EXE verwende? Werde ich die App ohne das Fenster starten und dann das Fenster zurückbringen? Ich werde Java zum Starten von PowerShell starten, um App zu starten, aber was zum Teufel!

+1

Warum starten Sie diese externe Anwendung nicht, wenn Ihre Anwendung "gut und bereit" ist? Ist es wirklich notwendig, die externe Anwendung vorab zu starten? Dauert es lange zu laden? – Bernard

+0

Nun, die externe Anwendung braucht eine verdammt lange Zeit zum Laden. Es muss im Grunde eine Verbindung zu einem Server über das WWW herstellen, um Informationen zu erhalten, einen Handshake auszuhandeln usw. Ich kann meine Anwendung nicht darauf warten lassen. Also möchte ich es so schnell wie möglich starten und mit anderen Aufgaben fortfahren. – 341008

Antwort

0

Sie sagen nicht, was diese andere Anwendung ist, aber ich gehe davon aus, dass Sie keine Kontrolle darüber haben (dh Sie können keine Parameteroption zum Starten in einem minimierten Modus oder ähnlichem geben.) Anstatt die Anwendung, die Sie starten, auszublenden, können Sie einfach die Methode toFront() in Ihrem Fenster verwenden, nachdem die andere Anwendung gestartet wurde, um Ihr Fenster vor das andere zu bringen? Und dann minimieren Sie Ihr Fenster, wenn Sie das andere aufdecken wollen?

Ich bin der Erste, der zugibt, dass es sich um eine verbissene Lösung handelt, aber es könnte funktionieren, je nachdem, wonach Sie suchen.

+0

Sie wissen nicht, wie lange es dauert, bis das andere Fenster sichtbar wird ... – Daniel

+0

Ich mag die Idee. Und ich vermute, dass es dafür keine saubere Lösung geben wird. Aber hier wird das zweite Fenster für einige Zeit nach vorne kommen. Wie Daniel sagt, weiß ich nicht, wie lange es dauert, bis er erscheint. – 341008

0

Sie können diese Parameter nicht angeben, ABER Sie können den Befehl "start" (versuchen Sie es in cmd), die diese Parameter unterstützt. Eventuell musst du es mit einer cmd.exe Shell aufrufen, aber das wird funktionieren!

+0

Ich bin in Ordnung mit dem Aufruf der Cmd-Shell, aber wenn ich "Start" verwende, kann ich das Fenster später nicht aktivieren. Werde ich? – 341008

+0

Wie würden Sie das tun, wenn Sie Runtime.getRuntime(). Exec() verwenden? Dies kann nur durch Senden von Window Messages geschehen, was leider plattformabhängig ist. Aber JNative ist ein gutes Werkzeug dafür. Sie müssen das Windows-API verwenden, um das Fenster zu finden und es nach vorne zu bringen. – Daniel

+0

"Wie würden Sie das tun, wenn Sie Runtime.getRuntime(). Exec() verwenden?": Ich kann nicht. Das ist der zweite Teil meines Problems. – 341008