我目前正在编写一个简单的Java应用程序。我有一个菜单,我可以执行不同的功能。我想要做的是执行一个过程,当该过程运行时,仍然能够在应用程序中导航,从菜单中选择不同的选项。我也希望能够从菜单中停止该过程。
假设我有这个:
public class UserInterface {
Console c = System.console();
boolean quitFlag = false;
public void userInput()
{
String choice = c.readline("> ");
while(choice != "exit")
{
switch(choice){
case "1":
startProcess();
break;
case "2":
endProcess();
break;
}
}
public void startProcess()
{
int i = 0;
while(!quitFlag)
i = i + 1;
}
public void endProcess()
{
quitFlag = true;
}
}
如何在执行userInput()时让startProcess()继续?这是一般原则吗?如果startProcess()和endProcess()在不同的类中,我该怎么做?
答案 0 :(得分:1)
有几种方法可以做到这一点,但最简单的方法是通过Thread类。 java.lang.Thread的Java文档显示了示例,但原则是您将单独的进程代码放在Thread子类中或传递给Thread的Runnable接口实现的run()方法中。 在线程上调用start()或run()以开始处理。 UI线程独立继续。
虽然Thread包含一个stop()方法,但它已弃用,Java文档解释了原因。最佳做法是创建自己的方法,设置一个标志,指示进程应该提前结束,然后频繁地检查此标志。
答案 1 :(得分:0)
类似的东西:
public class UserInterface {
MyProcessor processor = null;
...
public void startProcess() {
processor = new MyProcessor();
new Thread(processor).start();
}
public void endProcess() {
if (processor != null) {
processor.endProcess();
}
}
private class MyProcessor implements Runnable {
private boolean quitFlag = false;
@Override
public void run() {
int i = 0;
while (!quitFlag) {
i = i + 1;
}
}
public void endProcess() {
quitFlag = true;
}
}
}