2016-03-28 13 views
0

Ich schreibe gerade eine einfache Java App. Ich habe ein Menü, wo ich verschiedene Funktionen ausführen kann. Was ich tun möchte, ist einen Prozess auszuführen, und während dieser Prozess läuft, kann ich immer noch in der App navigieren und verschiedene Optionen aus dem Menü auswählen. Ich möchte auch in der Lage sein, den Prozess von der Speisekarte zu stoppen.Wie navigiere ich während eines laufenden Prozesses zur Benutzeroberfläche?

So nehme ich dies hatte:

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

Wie würde ich mich über das Lassen startProcess() fortsetzen, während der Ausführung userinput()? Gibt es dafür einen allgemeinen Grundsatz? Wie würde ich es machen, wenn startProcess() und endProcess() in verschiedenen Klassen wären?

+1

Das Prinzip ist Threading (oder Multi-Threading oder Concurrency), und dies ermöglicht Ihnen, auf mehreren Threads auf einem einzelnen Kern einer CPU zu laufen, so dass ein Prozess nicht die gesamte Ausführung oder Ihr Programm anhält. Ich würde vorschlagen, darüber nachzulesen. Hier sind einige Starter-Lektionen/Tutorials, die Sie auschecken können: [Von Oracle] (https://docs.oracle.com/javase/tutorial/essential/concurrency/) und [ein weiterer Tutorial-Punkt] (http: // www. tutorialspoint.com/java/java_multithreading.htm) –

+0

Ich werde auf jeden Fall diese überprüfen. Vielen Dank! –

Antwort

0

Etwas wie:

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

Es gibt mehrere Möglichkeiten, dies zu tun, aber die einfachste über die Thread-Klasse ist. Die Java-Dokumentation für java.lang.Thread zeigt Beispiele, aber das Prinzip besteht darin, dass Sie Ihren separaten Prozesscode in eine Thread-Unterklasse oder in die run() -Methode einer Runnable-Schnittstellenimplementierung einfügen, die an den Thread übergeben wird. Rufen Sie start() oder run() im Thread auf, um die Verarbeitung zu starten. Der UI-Thread wird unabhängig fortgesetzt.

Obwohl Thread eine stop() -Methode enthält, ist es veraltet und die Java-Dokumentation erklärt warum. Es empfiehlt sich, eine eigene Methode zu erstellen, mit der ein Flag gesetzt wird, das angibt, dass der Prozess vorzeitig beendet werden soll, und anschließend dieses Flag in regelmäßigen Abständen zu überprüfen.

Verwandte Themen