1

目前我正在尝试制作自己的 GDB 前端。到目前为止,一切都在顺利进行,除了一部分。管道输入到过程中,一旦它被打开。我将在下面的代码中包含一个示例:

    private JButton run = new JButton("Run");
    JToolBar vertical = new JToolBar(JToolBar.VERTICAL);
    vertical.add(run);
    add(vertical, BorderLayout.WEST);

    run.addActionListener(new ActionListner()
    {
        public void actionPerformed(ActionEvent arg0)
        {
            Process proc;
            proc = Runtime.getRuntime().exec("gdb");
            proc = Runtime.getRuntime().exec("r");
        }
    }

这将允许我运行命令“gdb”并将其所有输出通过管道传输到我的 TextArea,但在那之后,该进程关闭并且我不能再对同一进程运行诸如“r”之类的命令,而是打开另一个一个并尝试自己执行命令“r”;那么我有什么办法可以在同一个过程中执行这些吗?另外,因为这将是一个 GUI,我需要多个按钮能够与同一个进程交互,即按钮“运行”需要能够执行“r”,而“断点”按钮需要对同一个进程执行'b',这可能吗?

TL;DR:需要通过使用 GUI 从 Java 中的同一进程运行多个系统命令,这可能吗?

4

3 回答 3

4
final PrintWriter out = new PrintWriter(proc.getOutputStream());
out.println("r");

它们不是单独的进程,而是输入到gdb. :-)

于 2012-09-03T19:29:10.187 回答
0

您需要抽象您与 GDB 的交互。我会制作特殊的接口“DebugWithGDB”并声明诸如启动/停止/断点/等的方法

在您的情况下,您正试图将 GDB 与事件调用(actionPerformed)结合起来,此外 - 产生两个不同的进程。

我的类中有一个变量,这个变量将保存该接口的实现。因此,所有按钮都将引用该变量,并能够在其上调用命令。

还可以考虑使用http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html以免冻结您的 GUI(它会为您将操作放入主队列线程)

于 2012-09-03T19:29:48.367 回答
0

You just need to get the streams of the process to manipulate it. You must read this: http://www.javaworld.com/jw-12-2000/jw-1229-traps.html.

Here is an example of executind commands in one process: Sending commands to a console application?

于 2012-09-03T19:30:39.753 回答