【问题标题】:Java: How to open the execution of new Thread in separate command window from Main Thread?Java:如何在主线程的单独命令窗口中打开新线程的执行?
【发布时间】:2013-11-01 06:47:36
【问题描述】:

我想在单独的命令窗口中开始执行新线程,而不影响主线程的执行。

我有这样的事情:

public static void main(String args[]){
  NewThread n = new NewThread();
  Thread t = new Thread(n);
  t.start(); //Here I want to display the execution of t in separate command prompt.

}

class NewThread implements Runnable{
 public void run(){
  //....
 }
}

我可以使用 Runtime.getRuntime().exec() 吗?请帮忙..谢谢。

【问题讨论】:

  • 打开一个新的命令窗口将是特定于操作系统的。那样你觉得可以吗?如果是这样,那么您使用的是什么操作系统?
  • “不影响主线程执行”是什么意思?您是否尝试启动两个进程?
  • “不影响主线程的执行”的意思是我的主程序应该在一个命令提示符下单独运行,而新线程应该在另一个命令提示符下运行。我的意思是,我应该能够在两个单独的命令提示符下看到执行情况。

标签: java multithreading


【解决方案1】:

使用 Swing 并在内部创建一个带有文本区域的窗口,例如 java-swing-programming-buffered。这样您就不需要启动外部进程。

【讨论】:

  • 谢谢..这可能是一种方法。但对不起,我有限制,不能使用 GUI 来显示输出。
【解决方案2】:

使用Runtime.exec/bin/sh 作为单独的进程启动。如果要与该子进程通信,请使用 ProcessBuilder。阅读java-process-with-input-output-stream的答案。

【讨论】:

  • 但是我应该如何在另一个终端中显示它的输出呢?
  • hmm bin/sh 是不够的......你必须启动 gnome-terminal -e command 其中 command 是一个程序,它以某种方式与父进程通信。看起来gnome-terminal 不提供对其启动的命令的stdin 的访问权限。
  • 我认为java在这里有限制。它应该便于单独执行线程。可能我会试试这个。让我们来看看。谢谢阿列克谢。
【解决方案3】:

您可以使用setDaemon() 方法更改Thread 守护程序属性。

【讨论】:

  • 这与问题无关。
  • 为什么?据我了解,问题是如何从 java 中的简单线程创建一个守护进程,并且该线程在主端执行后不能死亡。所以他需要创建一个守护进程。
  • 您不仅误解了这个问题,而且您对 Thread.setDaemon() 所做的事情的理解似乎也是错误的。您可能应该为此阅读 javadocs。
猜你喜欢
  • 2021-09-03
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多