3

我正在尝试将字符串作为参数从一个 Java 应用程序传递到第二个作为 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

jverd 在 OTN 上接受的答案

是的,还有其他方法。这种方式不能满足您的需求吗?

  1. 还有另一个 exec() 签名接受一个数组,其中第一个元素是命令,其余元素是它的参数。它可能是也可能不是可变参数调用。这看起来像这样,尽管它可能不像我所拥有的那样工作。

    exec("cmd", "/c", "start", "java", "-jar", "C:\Dialog.jar", "传递的信息");

// 或者

exec(new String[] {"cmd", "/c", "start", "java", "-jar", "C:\\Dialog.jar", "Passed info"});
  1. 您可以将信息放在第二个进程读取的文件中。

  2. 您可以将信息存储在第二个进程查询的数据库中。

  3. 您可以让一个进程打开一个 ServerSocket,另一个进程连接到它并以这种方式发送数据。

  4. 您可以使用更高级别的消息传递工具,如 JMS、Active MQ 等。

  5. 您可以使用 RMI。

  6. 你可以使用CORBA。

我敢肯定还有其他方法。

我不知道哪种方法最适合您的需求。这是您需要弄清楚的事情,但如果您无法决定,如果您在此处发布有关您的要求的更多详细信息,有人可能会提供一些建议。

于 2011-05-28T20:08:11.073 回答
0

老兄,

阅读何时运行时执行程序不会,如果您仍然卡住,请回复我们。

这是一篇好文章。我猜你有“你的参数有问题”;-)

干杯。基思。

于 2011-05-25T09:10:34.033 回答