5

我有一个类“一”,它使用命令编译类“二”

我使用此代码运行两个

Process p2 = Runtime.getRuntime().exec("java two");
           BufferedReader in = new BufferedReader(
                   new InputStreamReader(p2.getInputStream()) );
           while ((line = in.readLine()) != null) {
             System.out.println(line);
           }
           in.close();

现在,当“两个”在其主要方法中打印时,它可以正常工作并且它们会打印在控制台中,但是当它有用户输入时,Eclipse 会崩溃。当我什至删除 while 循环时,它不允许我在控制台中写入

我正在使用创建一个新控制台

MessageConsole console = new MessageConsole("", null);
    console.activate();
    ConsolePlugin.getDefault().getConsoleManager()
            .addConsoles(new IConsole[] { console });
    MessageConsoleStream stream = console.newMessageStream();
    System.setOut(new PrintStream(stream, true));
4

2 回答 2

1

我有一个类似的问题。我扩展了 MessageConsole(只是为了能够拥有一个特定的 consolePageParticipant),并在构造函数中将 System.out 重定向到一个新的 MessageConsoleStream。使用我的代码的第一个版本时,RCP 应用程序崩溃了,而第二个版本则挂起。

我已经不记得崩溃/挂起的代码是什么样子了,但我发现我无法在显示 MessageConsole 之前更快地重定向输出。所以我在重定向之前使用了一个新线程等待一段时间(5 秒 - 可能太多了?)。

messageConsoleStream = myConsole.newMessageStream();

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        OutputStream out = new OutputStream() {
            @Override
            public void write(int b) throws IOException {
                messageConsoleStream.write(b);
                oldOut.write(b);
            }
        };
        System.setOut(new PrintStream(out));
        LOGGER.debug("'System.out' is redirected to the console."); //$NON-NLS-1$
    }
}, "Redirect system out to console...").start(); //$NON-NLS-1$

更改 Thread.sleep(5000); 仍然会很好。有些人等到控制台显示...

于 2013-07-11T10:30:42.173 回答
0

在行中指定终端: Process p2 = Runtime.getRuntime().exec(" gnome-terminal -x java two"); 或 Process p2 = Runtime.getRuntime().exec(" xterm -x java two");

这使得程序在前台运行,否则它变成一个不可见的进程......

于 2013-08-14T01:39:15.030 回答