2016-03-28 15 views
0

私は現在、単純なJavaアプリケーションを作成しています。私はさまざまな機能を実行できるメニューを用意しています。私がしたいことは、プロセスを実行することです。そのプロセスが実行されている間も、メニューからさまざまなオプションを選択して、アプリケーションをナビゲートすることができます。私はまた、メニューからプロセスを停止できるようにしたい。プロセスの実行中にUIにナビゲートするにはどうすればよいですか?

だから私はこれを持っていたとします

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

どのようにユーザ入力を(実行中のStartProcess()は継続させることに行きますか)?これには一般原則はありますか? startProcess()とendProcess()が別のクラスに含まれていたら、どうすればいいですか?以下のような

+1

原理はスレッド(またはマルチスレッドまたは同時実行性)です。これにより、CPUの単一コア上の複数のスレッドで実行できるため、1つのプロセスで実行またはプログラム全体が停止することはありません。私はそれを読んでお勧めします。以下は、[From Oracle](https://docs.oracle.com/javase/tutorial/essential/concurrency/)と[別の1つのフォーム・チュートリアル・スポンス](http:// www。 tutorialspoint.com/java/java_multithreading.htm) –

+0

私は間違いなくこれらをチェックします。ありがとう! –

答えて

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

    } 
} 
1

これを行うには、いくつかの方法がありますが、最も単純にはThreadクラスを介しています。 java.lang.ThreadのJavaドキュメントでは例を示していますが、原則として、別個のプロセスコードをThreadサブクラスまたはThreadに渡されるRunnableインターフェイス実装のrun()メソッドの中に配置することがあります。 処理を開始するには、スレッドでstart()またはrun()を呼び出します。 UIスレッドは独立して続行されます。

スレッドにはstop()メソッドが含まれていますが、推奨されていません.Javaドキュメントにはその理由が説明されています。ベストプラクティスは、プロセスが早期に終了することを示すフラグを設定し、頻繁な間隔でこのフラグをチェックする独自のメソッドを作成することです。

関連する問題