Приложение Java WebStart, над которым я работаю, использует SWT для GUI, и я недавно понял небольшую, но раздражающую проблему. Когда я выбираю действие, которое использует FileDialog
, т. Е. Сохраняет изображение, пользовательский интерфейс замерзает сразу после закрытия диалога. Изображение сохраняется и может быть открыто с помощью средства просмотра изображений по умолчанию без каких-либо проблем, но приложение не реагирует с этого момента, и я вынужден убить приложение.SWT зависает/зависает в Linux при развертывании в виде Java Web Start
Я заметил, что при попытке открыть файл, используя FileDialog
, результат будет таким же, если я вместо этого открою тот же файл, отправив его в качестве аргумента с помощью файла jnlp, он отлично работает, поэтому я не думаю, что это проблема с локальной файловой системой.
Я попытался реплицировать проблему только в Windows, чтобы убедиться, что она отлично работает на Win 7. В качестве второй попытки устранения неполадок я попытался сохранить изображение из локальной версии приложения (другими словами, -JWS), и это отлично работает ...
Я подозревал, что проблема разрешений в файле jnlp, но все права выданы приложению, а подписи все в порядке (факт, что приложение начинает указывать на это). Кроме того, файл изображения записывается в любом случае, поэтому он не может быть правдой.
Любые идеи?
UPDATE: Похоже, что проблема не только зависит от FileDialog, но и от любого графического взаимодействия с пользователем. Всякий раз, когда развертываются окна SWT, программа зависает с серым экраном, ПОСЛЕ любого действия, которое должно было быть сделано. Я скопировал код ниже, в этом конкретном примере, даже если я нажму «Отмена», приложение перестает реагировать на серый экран. Вот некоторые примеры кода:
public static boolean saveChangesBeforeDiscard(MyMain main)
{
if (main.isDirty())
{
MessageBox messageBox = new MessageBox(
main.getShell(),
SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL);
messageBox.setMessage("Would you like to save the changes?");
messageBox.setText(MyMain.TOOL_NAME);
int answer = messageBox.open();
if (answer == SWT.YES)
{
SaveFileAction save = new SaveFileAction(main);
save.run();
return save.isSaved();
}
else if (answer == SWT.NO)
{
return true;
}
return false;
}
return true;
}
Update 2: Btw Я использую Sun JDK 1.6.0. Вот вывод команды Java -version:
ява версия "1.6.0_22" Java (TM) SE Runtime Environment (строительство 1.6.0_22-b04) Java HotSpot (TM) 64-разрядного сервера VM (построить 17.1-b03, смешанный режим)
Какой JVM вы используете? –
@Dave: только что добавлено в основной текст – posdef
Вы указываете полные разрешения в политике безопасности веб-центра? – qualidafial