3 Stimmen

String als Parameter von einer Java-App an eine andere übergeben

Ich versuche, einen String als Parameter von einer Java-Anwendung an eine zweite als StartUp-Parameter zu übergeben

Ich habe zum Beispiel Anwendungen, die eine andere Java-Anwendung (die nur JOptionPane, JDialog oder einen einfachen JFrame enthält) aufrufen müssen, bevor System.exit(0); Dort versuche ich, einige Beschreibungen aus der abschließenden Anwendung an eine andere zu senden,

dieser Code ist Simulationen, was ich versucht, dass und in dieser Form, Code funktioniert richtig und angezeigt String in der JTextArea ...

    import java.io.IOException;
    import java.util.concurrent.*;

    public class TestScheduler {

        public static void main(String[] args) throws InterruptedException {
            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
            executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
            executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(true);
            for (int i = 0; i < 10; i++) {
                final int j = i;
                System.out.println("assign : " + i);
                ScheduledFuture<?> future = executor.schedule(new Runnable() {

                    @Override
                    public void run() {
                        System.out.println("run : " + j);
                    }
                }, 2, TimeUnit.SECONDS);
            }
            System.out.println("executor.shutdown() ....");
            executor.shutdown();
            executor.awaitTermination(10, TimeUnit.SECONDS);
            try {
                Process p = Runtime.getRuntime().exec("cmd /c start java -jar C:\\Dialog.jar 'Passed info'");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            System.out.println("System.exit(0) .....");
            System.exit(0);
        }

        private TestScheduler() {
        }
    }

//
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

public class Main {

    private static ArrayList<String> list = new ArrayList<String>();

    public Main() {
        JFrame frm = new JFrame();
        JTextArea text = new JTextArea();
        if (list.size() > 0) {
            for (int i = 0; i < list.size(); ++i) {
                text.append(list.get(i));
            }
        }
        JScrollPane scroll = new JScrollPane(text,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.add(scroll, BorderLayout.CENTER);
        frm.setLocation(150, 100);
        frm.setSize(new Dimension(400, 300));
        frm.setVisible(true);
    }

    public static void main(String[] args) {
        if (args.length > 0) {
            for (String s : args) {
                list.add(s);
                System.out.print(s + " ");
            }
        }
        Main m = new Main();
    }
} 

meine Frage:

EDIT1: Gibt es eine andere Möglichkeit, wie man einen Wert von einer Java-Anwendung (es muss System.exit(0);) an eine andere Java-Anwendung übergeben, eine andere Möglichkeit, wie ich versucht, indem Sie Process/ProcessBuilder

EDIT2: mein Querverweis http://forums.oracle.com/forums/thread.jspa?threadID=2229798&tstart=0

akzeptierte Antwort von OTN

2voto

mKorbel Punkte 109073

Akzeptierte Antwort von jverd auf OTN

Ja, es gibt andere Wege. Entspricht dieser Weg nicht Ihren Bedürfnissen?

  1. Es gibt eine weitere exec()-Signatur, die ein Array annimmt, bei dem das erste Element der Befehl ist und die restlichen Elemente die Args sind. Es kann ein varargs-Aufruf sein, muss es aber nicht. Das würde ungefähr so aussehen, obwohl es vielleicht nicht genau so funktioniert, wie ich es habe.

    exec("cmd", "/c", "start", "java", "-jar", " C:\Dialog.jar ", "Passed info");

// OR

exec(new String[] {"cmd", "/c", "start", "java", "-jar", "C:\\Dialog.jar", "Passed info"});
  1. Sie könnten die Informationen in einer Datei speichern, die der zweite Prozess liest.

  2. Sie könnten die Informationen in einer Datenbank speichern, die der zweite Prozess abfragt.

  3. Sie könnten einen Prozess einen ServerSocket öffnen lassen und den anderen mit diesem verbinden und die Daten auf diese Weise senden.

  4. Sie könnten ein übergeordnetes Messaging-Tool wie JMS, Active MQ usw. verwenden.

  5. Sie könnten RMI verwenden.

  6. Sie könnten CORBA verwenden.

Ich bin sicher, dass es auch andere Ansätze gibt.

Ich habe keine Ahnung, welcher Ansatz für Ihre Bedürfnisse am besten geeignet ist. Das müssen Sie selbst herausfinden. Wenn Sie sich jedoch nicht entscheiden können, sollten Sie hier mehr Details über Ihre Anforderungen posten, vielleicht kann Ihnen jemand einen Rat geben.

0voto

corlettk Punkte 12546

Kumpel,

Lesen Sie Wenn Runtime Exec nicht will und melden Sie sich bei uns, wenn Sie immer noch nicht weiterkommen.

Das ist ein guter Artikel. Ich vermute, Sie haben "ein Problem mit Ihrem Parameter " ;-)

Zum Wohl. Keith.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X