Ich verwende SWT in einem GUI-Hauptprogramm. Innerhalb davon erstelle ich einen anderen Thread, um einige Programme auszuführen. Wenn jedoch in diesen Prozessen einige Fehler auftreten, möchte ich dies dem Benutzer mitteilen, indem ich ein Meldungsfeld aufzeige. Da in SWT nur ein einzelner Thread GUI-Operationen ausführen kann, ließ ich den Programm-Runner Ausnahmen auslösen, so dass der GUI-Thread damit umgehen konnte. Ich habe jedoch Probleme, weil ich einen neuen Thread für den Programm-Runner erstelle (um den GUI-Thread nicht zu verzögern, der einige Grafiken ständig aktualisieren und aktualisieren wird), aber als Ergebnis bleiben die auftretenden Exceptions hängen als Teil dieses Threads, der das Fehlermeldungsfeld nicht erstellen kann. Irgendwelche Vorschläge, wie man damit umgehen soll? .SWT, mehrere Threads und Ausnahmen
private void goButtonActionPerformed()
{
// create the program runner object
ProgramRunner PR = new ProgramRunner(); // real code passes in data to be used
try{
// check all necessary parameters are entered
boolean paramsOK = PR.checkParams();
if (paramsOK)
{
// all necessary information is available. Start Processing.
Thread t = new Thread() {
public void run()
{
try{
PR.runPrograms();
}
catch (IOException iox)
{
// This does not work to catch & display the exceptions
// which took place in PR.runPrograms(), because this
// thread is not allowed to perform GUI operations.
// However, I don't know how to pass this
// exception/error notification out of this thread.
MessageBox mb = new MessageBox(m_Shell, SWT.ICON_ERROR);
mb.setMessage(iox.getMessage());
mb.open();
}
}
};
t.start();
}
}
catch (IOException iox)
{
// this works to catch & display the exceptions which took place
// in PR.checkParams() because that is not a separate thread
MessageBox mb = new MessageBox(m_Shell, SWT.ICON_ERROR);
mb.setMessage(iox.getMessage());
mb.open();
}
Ach ja, und ich realisiere, dass PR.checkParams() keinen Boolean zurückgeben muss, um überprüft zu werden, denn anstatt false zurückzugeben, hätte es einfach eine Exception geworfen, die hier behandelt wird. – sacrawford