2012-03-30 6 views
1

Ich schreibe meinen Code in Schwung. Um eine private Funktion einer anderen Klasse zu starten, die im AWT-Thread aufgerufen werden kann. Ich schreibe einfach den Code dieser Funktion in meiner Klasse in SwingUtilities.invokeLater Thread.Thread kehrt nicht von SwingUtilities.invokeLater zum Hauptthread zurück

aber nach der Ausführung dieser Kontrolle wird nicht zurück zum Haupt-Thread. Kann jemand vorschlagen, was passiert und wie man das löst?

Antwort

3

SwingUtilities.invokeLater blockiert nicht die Ausführung des aktuellen Threads. Wenn es glauben macht, können Sie einfach

System.out.println("Before"); 

SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      //code of private function 
     } 
    }); 

System.out.println("After"); 

tun, und Sie werden nach einander mehr oder weniger sofort Before und After gedruckt rechts.

(Stellen Sie sicher, dass Sie nicht versehentlich SwingUtilities.invokeAndWait verwendet.)

1

SwingUtilities.invokeLater(Runnable) wird der Code in der EDT ausführen, wie Sie richtig gesagt haben. main Thread führt seine Ausführung direkt nach dem Anruf von invokeLater. Sie können den Hauptthread nicht sehen, wenn Sie das Programm im Debugger ausführen und einen Breakpoint irgendwo im Code haben, der in EDT ausgeführt wird, aber der Thread main wird sicher ausgeführt.

Verwandte Themen