Est-il possible d'appeler java boucle principale?


Je n'ai trouvé aucune réponse liée à cette question. Je me demande si c'est possible. Voici mon problème.

J'ai une application de traitement de base écrite en Fortran. L'application a besoin d'une nouvelle interface utilisateur. Le code Fortran a sa propre boucle principale. Il communique avec l'interface utilisateur via une routine d'interface. Cette routine appelle la boucle principale de quelle que soit la bibliothèque d'interface utilisateur utilisée, par exemple l'interface utilisateur actuelle est Motif. Donc ça appelle le Motif de la boucle principale. Je voudrais remplacez Motif par Java swing. Je n'ai pas pu trouver de chose sur la boucle d'événement principal Java. Mes questions sont
1) Est-il possible d'appeler la boucle principale Java directement ?
2) Je sais qu'il est possible pour Java d'appeler une autre langue. Comment une autre langue peut-elle appeler des routines Java ?

-------------- commentaires Additionnels

Il semble que ce ne soit pas possible de le faire, du moins pas comme je l'envisage. Voici un algorithme que j'essaie d'utiliser

Boucle jusqu'à mettre fin
faire un traitement interne
1 vérifier la file d'attente des événements de l'interface utilisateur si la file d'attente a un événement
2 appelez le répartiteur d'événements UI pour tous les événements UI
boucle de fin

Ce que j'aime savoir, y a-t-il un type de routine pour remplacer #1 et #2. J'espérais que Java avait quelque chose comme EventQueue.hasEvent ();
EventQueue.dispatchEvent (event);

D'après les commentaires jusqu'à présent, il ne semble pas qu'il y ait une telle chose.

Author: tadpole, 2010-10-11

4 answers

  1. SwingUtilities.invokeAndWait() et invokeLater()
  2. JNI peut être utilisé pour intégrer une JVM dans une application native et communiquer avec elle via une bibliothèque liée. Mais dans votre scénario, il serait probablement préférable que l'interface utilisateur s'exécute en tant que processus séparé et communique avec l'application principale via des sockets.
 4
Author: Michael Borgwardt, 2010-10-11 15:08:18

Non, vous ne pouvez pas appeler directement la boucle d'événements principale de l'interface graphique; cependant, vous pouvez soumettre des éléments à la boucle d'événements principale pour éventuellement être exécutés sur son Thread.

La boucle principale fait beaucoup de choses à l'intérieur de l'interface graphique, certaines de ces choses sont de la planification du graphique à tirer, accepter l'entrée, etc. C'est un choix de conception, et Java est allé avec un modèle multi-threading où le code non-GUI ne s'exécute pas dans la boucle d'événements GUI. Le raisonnement derrière cela est probablement dû au fait que la boucle GUI peut être mis en pause ou corrompu provoquant des problèmes de performances GUI.

 1
Author: Edwin Buck, 2010-10-11 15:09:15

Vous devriez jeter un oeil à l'interface native Java (question 2 ;))

 0
Author: oyo, 2010-10-11 15:11:57

Vous pouvez remodeler votre application pour qu'elle s'exécute en tant qu'application Java et invoquer vos éléments Fortran via JNI. Puis à l'intérieur de votre application Java, vous pouvez obtenir le système file d'attente d'événements par Toolkit.getDefaultToolkit().getSystemEventQueue(), et appeler sa peekEvent et postEvent.

 0
Author: Geoffrey Zheng, 2010-10-11 18:48:52