目前我正在尝试将自己的前端设为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中的同一进程运行多个系统命令,是否可能?
答案 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?