6 Stimmen

Java - zurück zum Hauptthread wechseln?

Wie kann ich von einem anderen Thread zurück zum Hauptthread wechseln, wenn eine Ausnahme auftritt? Wenn eine Ausnahme auf einem untergeordneten Thread ausgelöst wird, möchte ich, dass eine Benachrichtigung an den Hauptthread gesendet wird und eine Methode vom Hauptthread ausgeführt wird. Wie kann ich dies tun?

Danke.

Zusätzliche Informationen

Ich rufe eine Methode aus meiner Hauptmethode auf und starte dort nach einigen Berechnungen und Änderungen einen neuen Thread

Thread thread = new Thread() {
    @Override
    public void run() {
        .....
    }
}
thread.start();

3voto

Miserable Variable Punkte 27724

Wenn die Ausnahme im untergeordneten Thread auftritt, was macht dann der Hauptthread? Er muss Warten für alle Fehler in einem Child-Thread.

Sie können eine UncaughtExceptionHandler im untergeordneten Thread, der ein Ereignis auslösen kann, auf das der Hauptthread wartet.

3voto

Tom Punkte 41119

Wie TofuBeer sagt, müssen Sie mehr Kontext liefern, wenn dieser Kontext jedoch darin besteht, dass Sie eine Swing-App sind...

SwingUtilities.invokeLater(Runnable r) ermöglicht es Ihnen, den Hauptausführungs-Thread von Swing aufzurufen.

} catch (final Exception e) {
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
           //do whatever you want with the exception
        }
    }); 
}

1voto

OscarRyz Punkte 189898

Wenn Ihr Child-Thread im Haupt-Thread erstellt wurde, können Sie die Ausnahme im Popup-Fenster lassen und sie im Haupt-Thread behandeln.

Sie können auch eine Art Rückruf einrichten.

Ich habe das allerdings noch nicht selbst ausprobiert.

0voto

Ravi Wallau Punkte 10137

Implementierung der Schnittstelle http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.UncaughtExceptionHandler.html in einer Klasse Ihrer Anwendung und lassen Sie sie mit dem Thread und der von ihm erzeugten Ausnahme umgehen.

Weitere Einzelheiten sind dem Dokument zu entnehmen.

EDIT: Das ist wahrscheinlich nicht das, was Sie wollten - ich glaube, die Methode wird von dem Thread aufgerufen, der gerade die Ausnahme ausgelöst hat. Wenn Sie möchten, dass eine Methode auf Ihrem Hauptthread (in seinem Kontext) ausgeführt wird, muss der Hauptthread irgendwie darauf warten.

Aber wenn Sie nur die Ausnahme behandeln wollen, ist das ein Fall. Der beste Ansatz wäre, die Ausnahme in einem try...catch-Block innerhalb Ihres Threads zu behandeln.

-2voto

TofuBeer Punkte 59410

Diese könnte für Sie arbeiten.

public class Main
{
    public static void main(final String[] argv)
    {
        final Main main;

        main = new Main();
        main.go();
    }

    public void go()
    {
        final Runnable runner;
        final Thread   thread;

        runner = new Foo(this);
        thread = new Thread(runner);
        thread.start();
    }

    public void callback()
    {
        System.out.println("hi!");
    }
}

class Foo
    implements Runnable
{
    private final Main main;

    Foo(final Main m)
    {
        main = m;
    }

    public void run()
    {
        // try catch and handle the exception - the callback is how you notify main
        main.callback();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X