Вы должны использовать Dispatcher в вашем методе Init. Например, вот так:
Application.Current.Dispatcher.Invoke(() => this.Close());
Вы не высвобождаете собственные средства правильно - у Вас есть утечка ресурсов.
Вы не должны делать этого:
private void exit() {
System.exit(0);
}
Основной метод выйдет, когда оболочка будет расположена. Если необходимо использовать метод выхода, назовите его после расположения всех ресурсов SWT:
Display display = new Display();
try {
Shell shell = new Shell(display);
try {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} finally {
if (!shell.isDisposed()) {
shell.dispose();
}
}
} finally {
display.dispose();
}
System.exit(0);
Когда Вы выделили Shell:
shell = new Shell();
некоторые собственные ресурсы были выделены наряду с ним. Необходимо избавиться от этих ресурсов перед выходом из приложения:
private void exit() { shell.dispose(); System.exit(0); }
Конечно, необходимо предоставить переменную "оболочки" выходу () метод, чтобы сделать это.
Обратите внимание, что я не полагаю, что необходимо расположить Дисплей, так как Вы не создали его с"new Display()
". Но что-либо в SWT (за исключением нескольких объектов, где это документируется в JavaDoc), что Вы создаете с new
необходимо расположить, когда Вы закончены с ним. Иначе Вы пропустите собственные ресурсы.