试图将JButton用作InputStream

时间:2012-09-03 19:23:27

标签: java swing gdb inputstream runtime.exec

目前我正在尝试将自己的前端设为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,我需要有多个按钮能够与同一个进程交互,即按钮'Run'需要能够执行'r',而按钮'Breakpoint'需要对同一个进程执行'b',这可能吗?

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

3 个答案:

答案 0 :(得分:4)

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

它们不是单独的流程,而是输入gdb。 : - )

答案 1 :(得分:0)

您需要抽象与GDB的交互。我将创建特殊的接口“DebugWithGDB”并声明诸如start / stop / breakpoint / etc

之类的方法

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

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

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

答案 2 :(得分:0)

您只需要获取流程的流程来操纵它。你必须阅读:http://www.javaworld.com/jw-12-2000/jw-1229-traps.html

以下是一个进程中的executind命令示例:Sending commands to a console application?