如何在进程运行时导航到UI?

时间:2016-03-28 16:58:30

标签: java

我目前正在编写一个简单的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()在不同的类中,我该怎么做?

2 个答案:

答案 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;
        }

    }
}