Le moyen le plus rapide de créer un dialogue de message Java (swing / awt / other)?
Je suis de la création d'une application Java qui va faire du traitement doit alors afficher un message pour donner le feedback de l'utilisateur.
Cependant, elle semble être incroyablement lente - plus de deux secondes pour revenir.
J'ai dépouillé la source en bas de l'apparente coupable, et voici le code utilisé:
package SwingPlay;
import javax.swing.JFrame;
public class Dialog
{
public static void main( String[] args )
{
JFrame frame = new JFrame( "DialogDemo" );
}
}
Je suis d'exécuter cette ligne de commande:
java -classpath . SwingPlay.Dialog
Comme vous pouvez le voir - je suis en train de faire, mais rien de créer un JFrame, même pas de l'afficher.
Dans le cas où il est pertinent, voici mon java -version
de sortie:
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
Et c'est (pour l'instant) en cours d'exécution à l'encontre de Win XP SP2.
Donc, première question: Pourquoi est-il si lent?
Plus important encore, je veux juste un message simple (interface graphique, pas cmdline) à afficher sans délai - quelqu'un peut-il fournir un peu de code pour faire cela?
Mise à jour:
Un peu de fond pourrait être utile:
Je suis entrain de créer une application qui aura de nombreuses "têtes" (c'est à dire les différentes interfaces utilisateur tout en utilisant les mêmes classes de base pour en faire des pièces complexes).
J'ai actuellement une pure ligne de commande de la tête qui fonctionne très bien, répond tout de suite.
Je vais aussi avoir un standard de l'application régulière d'un point & click GUI, et ne prévoyait pas de problèmes avec ce bit.
Ce que je suis en train de travailler sur est un hybride de ces deux il sera lancé à partir d'une boîte de dialogue Exécuter (ou similaire lanceur), éventuellement avec des arguments, et de ne répondre avec, effectivement, un message d'état, qui peut être rejeté avec une touche.
Ce dernier est celui où la question est concentré.
Alors que je ne suis pas opposé à l'utilisation de mon version en ligne de commande avec des scripts shell (mais ne pense pas qu'il serait nécessaire!) les questions /réponses semblent suggérer que les choses ne sont pas en cours d'exécution plus rapide pour moi que pour les autres, l'exemple prend 1460ms pour moi, par rapport à 70ms - une différence significative.
source d'informationauteur Peter Boughton
Vous devez vous connecter pour publier un commentaire.
De la raison du retard parce que Java est un langage interprété et cela prend du temps à démarrer une nouvelle JVM ( l'interprète )
Fait de la création de l'image qui prend moins de quelques ms ( environ 70 ms dans ma machine ).
Si cela est destiné à être utilisé dans une application Java, vous n'avez pas besoin de s'inquiéter à ce sujet. Il sera presque instantanée ( vous devez utiliser JDialog ou JOptionPane )
Si ce n'est PAS destiné à être utilisé à l'intérieur d'une application Java, et 2 secondes de trop ( et je pense que c'est trop de ), vous devriez envisager un autre outil pour le travail.
Voici comment j'ai mesurer le temps dans votre code:
Je voudrais utiliser un JOptionPane pour afficher le message. Voici un exemple simple:
Je crains que je ne peux pas expliquer le retard que vous rencontrez. Sur mon système, votre extrait de code s'exécute dans les 500 millisecondes.
Java est le bon outil pour cela. La configuration de la JVM implique beaucoup de choses qui se sont produites dans le fond avant la première ligne de code Java peut être exécutée, et il n'y a vraiment aucun moyen de la contourner.
Aussi, il serait beaucoup plus rapide de créer un AWT Fenêtre (ou peut-être un Cadre) au lieu d'un JFrame parce que ce dernier a à tirer dans une foule de classe supplémentaire fichiers.
Avez-vous BESOIN d'utiliser java pour afficher la boîte de message? SI la boîte est en provenance de l'extérieur de votre application, vous pouvez utiliser quelque chose d'autre à générer une boîte de dialogue.
De faire un natif de windows app qui montre juste une boîte de message à partir d'une chaîne de ligne de commande ne prendra que quelques heures tout au plus. La plupart des langages de script doit avoir les moyens de le faire aussi. voici un exemple d'un gars à l'aide de javascript via la ligne de commande:
http://www.snee.com/bobdc.blog/2009/01/displaying-a-message-box-from.html
Oh, et si vous n'avez pas vraiment besoin pour afficher la boîte de dialogue à partir de Java vous pouvez regarder dans l'aide de KDialog (ou GNOME homologue) ou quelque chose de similaire.
Vous pouvez utiliser le JOptionDialog
Puisque vous êtes intéressés par l'excès de vitesse, et puisque la plupart de la surcharge semble être la JVM de démarrage des frais généraux, découvrez Nailgun qui vise à l'adresse de lenteur de démarrage de la JVM en gardant une JVM cours d'exécution en arrière-plan tout le temps. Dans votre cas, après un run de la bibliothèque Swing trop finira par être mis en cache (et j'espère qu'après un peu plus de pistes de JITed trop), la poursuite de la réduction de la surcharge.
Toutefois, cette approche va entraîner une augmentation de l'utilisation de la mémoire en raison de l'arrière-plan de la JVM et aussi causer d'autres problèmes, car il peut ne pas être simple pour déterminer quand arrêter.
Ce que vous êtes probablement à la recherche pour le nouvel écran d'accueil de la fonctionnalité dans la version 6 de Java. Au lieu d'avoir à attendre que la JVM de charge (il y a toujours un coût pour charger n'importe quel VM), cela vous permettra de charger un écran à l'avance.
Avez-vous essayé de courir à travers un profiler comme NetBeans? Si il y a un goulot d'étranglement profondément à l'intérieur de la bibliothèque standard, c'est un bon moyen de le trouver.