我启动这个线程,基本上使用ProcessBuilder执行系统调用。
Runnable threadJob = new MyRunnable();
new Thread(threadJob).start();
此线程使用其run()方法执行以下Process Builder:
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();
// Read output
StringBuilder out = new StringBuilder();
BufferedReader brin = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null, previous = null;
while ((line = brin.readLine()) != null) {
if (!line.equals(previous)) {
previous = line;
out.append(line).append('\n');
}
}
当成功执行此线程时,我在其中启动一个不同的线程以使用ProcessBuilder启动xterm:
if (process.waitFor() == 0) {
Runnable threadJob2 = new XRunnable();
new Thread(threadJob2).start();
}
使用XRunnable()的run()方法中的以下代码成功启动Xterm:
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();
// Read output
StringBuilder out = new StringBuilder();
BufferedReader brin = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null, previous = null;
while ((line = brin.readLine()) != null) {
if (!line.equals(previous)) {
previous = line;
out.append(line).append('\n');
}
}
if (process.waitFor() == 0) {
System.out.println("Xterm killed")
}
问题我面临的是控制总是停留在这个Xterm上。如果我使用相同的线程启动另一个Xterm,那么它将无法控制,我无法在新的Xterm窗口中键入任何内容,直到前一个被杀死。我认为问题是它在第一个Xterm的读取输入流时停留,并且没有创建新的输入流来读取第二个Xterm。这就是为什么我可以在第一次Xterm被杀之后输入内容。有人可以建议解决这个问题吗?我想在每个Xterm窗口中输入一些东西,我多次使用相同的线程代码打开。
答案 0 :(得分:0)
我的错...问题不在于上面的代码。上面显示的代码绝对没问题。哈希表搞乱了线程ID。感谢David的回复。