2012-04-02 11 views
4

Ich habe einen Java-Code, der wie folgt aussieht:Java - Wie nach Ereignis zu UI-Thread oder rufen Sie eine Funktion von UI-Thread?

//UI thread 
//Some code 
Job j = new Job(jobName) { 

@Override 
public IStatus run(IProgressMonitor monitor) { 
try { 
        //Some code 
        SomeFunc(); 
        //Some code 
        return Status.OK_STATUS; 

    } catch(Exception e) { 
    } 
    finally { 
    } 
} 
}; 
j.schedule(); 

Das Problem ist, dass die SomeFunc(); aus dem UI-Thread aufgerufen werden muss.

Ich bin neu in Java, also können Sie mir bitte helfen, die besten Methoden zum Hochladen von Ereignissen in den UI-Thread oder das Aufrufen einer Funktion des UI-Threads zu zeigen?

+0

Sie müssen klarer sein - welche UI-Framework verwenden Sie? – shem

+0

Ich entwickle ein Eclipse-Plugin und verwende Eclipse SDK. – sara

+1

Klingt so, als müsste man in SWT schauen dann – pjp

Antwort

4
EventQueue.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
    // your UI code 
    } 
}); 

oder Sie verwenden können Swingworker, seine andere Wahl: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

+0

Können Sie bitte erläutern, wo und wie Sie dieses Stück Code nennen? – sara

+2

'EventQueue.invokeLater (...)' wird oft als 'SwingUtilities.invokeLater (...)' geschrieben Beachten Sie, dass dies für Swing und nicht SWT gilt. Siehe http://stackoverflow.com/questions/7857531/swt-swing-threads-n-hell – pjp

+0

@sara: Ersetzen Sie einfach Ihren Aufruf an "SomeFunc" mit dem Code @Wajdy gepostet und den Anruf auf "SomeFunc" innerhalb der 'run' Methode. – Tudor

2

In SWT verwenden Display.syncExec(), wie in this snippet oder Display.asyncExec().

Verwandte Themen