2013-11-28 29 views
0

我创建了一个以某种循环运行的程序,并且仅在特定事件发生时才会停止;我忘了实现从“外部”中断程序的可能性,例如在提示符中输入“halt”。将主体转变为线程

所以现在我有这样的事情:

public void main(....) { 
    instruction1; 
    instruction2; 

    while(true) { 
     if(???) 
      break; 
    } 

} 

而想改变它在类似:

main() { 
    do { 
     instruction1; 
     instruction2; 
     ... 
     ... 
    } while(prompt do not contains 'halt'); 
+0

你将不得不在两个不同的线程中做这个。看看这个:http:// stackoverflow。 com/questions/8980240/getting-a-thread-to-pause-thread-wait-thread-notify。它有一个很好的扩展答案。 – Zerkz

+0

此外,如果您只想在命令行提示环境(对于大多数操作系统,至少)中明确地停止该程序,则可以简单地使用Ctrl-C,在大多数情况下它将终止程序(但并非总是...) – Zerkz

回答

0

要转成主线程我不认为,尝试像

while(true){ 
    if(inputScanner.hasNext() && inputScanner.next().equals("halt")){ 
     break; 
    } 
/* Do whatever is needed */ 
} 

会发生什么是扫描仪检查输入没有阻止与hasN循环ext()方法,然后只有当它确实有数据读入才读取数据。

+1

hasNext()和next()都能够阻塞该线程。我不认为这是正确的做法。 – Zerkz

+0

你说得对,但我觉得很奇怪的是,没有办法检查没有阻塞的输入。 – user60561

+0

实际上,进一步的研究表明,java.io.Reader有一个ready()方法,当read()会阻塞时它只返回true。 – user60561