L'application Java WebStart sur laquelle je travaille utilise SWT pour l'interface graphique, et j'ai récemment réalisé un problème petit mais ennuyeux. Lorsque je choisis une action qui utilise un FileDialog
, c'est-à-dire enregistrer l'image, l'interface utilisateur se bloque immédiatement après la fermeture de la boîte de dialogue. L'image est enregistrée et peut être ouverte avec une visionneuse d'images par défaut sans aucun problème, mais l'application n'est plus réactive à partir de ce moment, et je suis obligée de tuer l'application.SWT bloque/se bloque sur Linux, lors du déploiement en tant que Java Web Start
J'ai remarqué que le résultat est le même quand essayer d'ouvrir un fichier en utilisant un FileDialog
, si je préfère ouvrir le même fichier en l'envoyant comme argument en utilisant le fichier jnlp, ça marche bien, donc je ne sais pas pense que c'est un problème avec le système de fichiers local.
J'ai essayé de reproduire le problème sur Windows seulement pour voir que cela fonctionne bien sur Win 7. Comme une deuxième tentative de dépannage, j'ai essayé de sauvegarder une image de la version locale de l'application (en d'autres termes, non -JWS) et ça fonctionne bien aussi ...
Je suspectais un problème d'autorisations sur le fichier jnlp, mais toutes les permissions sont données à l'application, et les signatures sont toutes ok aussi (le fait que l'application commence points à cela). D'ailleurs le fichier image est écrit de toute façon, donc ça ne peut pas vraiment être une chose de permission.
Des idées?
MISE À JOUR: Apparemment, le problème ne dépend pas uniquement de FileDialog, mais de n'importe quel type d'interaction utilisateur graphique. Chaque fois que des fenêtres SWT sont déployées, le programme se fige avec un écran gris, APRÈS n'importe quelle action qui était supposée être faite. J'ai copié du code ci-dessous, dans cet exemple particulier même si je clique sur Annuler, l'application devient non réactive avec un écran gris. Voici quelques exemples de code:
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;
}
Mise à jour 2: Btw J'utilise Sun JDK 1.6.0. Voici la sortie de la commande java -version:
java version "1.6.0_22" Java (TM) SE Runtime Environment (build 1.6.0_22-b04) Java HotSpot (TM) 64 bits serveur VM (build 17.1-b03, mode mixte)
Quelle JVM utilisez-vous? –
@Dave: vient d'être ajouté au texte principal – posdef
Spécifiez-vous des autorisations complètes dans votre stratégie de sécurité Webstart? – qualidafial