3

1 つの Java Aplications から 2 番目の StartUp パラメータとして文字列をパラメータとして渡そうとしています。

たとえば、別の Java アプリケーション (JOptionPane、JDialog、または単純な JFrame のみを含む) の開始を呼び出す必要がSystem.exit(0);あるアプリケーションがあり、アプリケーションを閉じることから別のアプリケーションにいくつかの説明を送信しようとしています。

これらのコードは、私が試したシミュレーションであり、この形式では、コードは正しく機能し、文字列を 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();
    }
} 

私の質問 :

EDIT1:あるJavaアプリケーション(System.exit(0);と呼ばれる必要があります)から別のJavaアプリケーションに値を渡す別の方法が存在する場合、Process/ProcessBuilderを使用して試した別の方法

EDIT2: 私のクロスポストhttp://forums.oracle.com/forums/thread.jspa?threadID=2229798&tstart=0

OTNからの受け入れられた回答

4

2 に答える 2

2

OTN で jverd が受け入れた回答

はい、他の方法もあります。この方法はあなたのニーズを満たしていませんか?

  1. 配列を取る別の exec() シグネチャがあります。最初の要素はコマンドで、残りの要素はその引数です。varargs 呼び出しである場合とそうでない場合があります。私のように正確に動作しないかもしれませんが、それはこのようになります。

    exec("cmd", "/c", "start", "java", "-jar", "C:\Dialog.jar", "渡された情報");

// また

exec(new String[] {"cmd", "/c", "start", "java", "-jar", "C:\\Dialog.jar", "Passed info"});
  1. 2 番目のプロセスが読み取るファイルに情報を入れることができます。

  2. 2 番目のプロセスが照会するデータベースに情報を格納できます。

  3. 1 つのプロセスで ServerSocket を開き、もう 1 つのプロセスでそれに接続して、その方法でデータを送信することができます。

  4. JMS、Active MQ などの高レベルのメッセージング ツールを使用できます。

  5. RMI を使用できます。

  6. CORBA を使用できます。

他のアプローチもあると確信しています。

どのアプローチがあなたのニーズに最も適しているかわかりません。それはあなたが理解する必要があるものですが、決定できない場合は、ここに要件の詳細を投稿すると、誰かがアドバイスを提供するかもしれません.

于 2011-05-28T20:08:11.073 に答える
0

お前、

When runtime exec will notを読んで、それでも問題が解決しない場合は、私たちに連絡してください。

良い記事です。「パラメータに問題がある」と思います;-)

乾杯。キース。

于 2011-05-25T09:10:34.033 に答える