从Java程序中运行另一个Java程序并获取输出/发送输入

时间:2012-10-13 01:32:44

标签: java swing ui-automation

我需要一种从我的应用程序中运行另一个java应用程序的方法。我想将其输出重新放入JTextArea并通过JTextBox发送输入。

1 个答案:

答案 0 :(得分:2)

取决于

您可以使用自定义URLClassLoader加载第二个应用程序jar并直接调用主类main方法。显然,问题是得到程序的输出;)

另一个解决方案是使用ProcessBuilder启动java进程并通过InputStream

读取输出

这里的问题是试图找到java可执行文件。一般来说,如果它在路径上你应该没事。

您可以查看this作为如何阅读输入流的基线示例

使用示例更新

这是我的“输出”程序,它产生输出......

public class Output {
    public static void main(String[] args) {
        System.out.println("This is a simple test");
        System.out.println("If you can read this");
        System.out.println("Then you are to close");
    }
}

这是我阅读输入的“读者”程序......

public class Input {

    public static void main(String[] args) {

        // SPECIAL NOTE
        // The last parameter is the Java program you want to execute
        // Because my program is wrapped up in a jar, I'm executing the Jar
        // the command line is different for executing plain class files
        ProcessBuilder pb = new ProcessBuilder("java", "-jar", "../Output/dist/Output.jar");
        pb.redirectErrorStream();

        InputStream is = null;
        try {

            Process process = pb.start();
            is = process.getInputStream();

            int value;
            while ((value = is.read()) != -1) {

                char inChar = (char)value;
                System.out.print(inChar);

            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }        
    }
}

您还可以结帐Basic I/O了解更多信息