是否可以调用java主事件循环?

时间:2010-10-11 15:01:43

标签: java swing java-native-interface

我找不到与此问题相关的任何答案。我想知道是否有可能。这是我的问题。

我有一个用Fortran编写的核心处理应用程序。该应用程序需要一个新的UI。 Fortran代码有自己的主循环。它沟通 通过界面例程使用UI。此例程调用主事件循环 它使用的UI库,例如当前的UI是Motif。所以它打电话 Motif主事件循环。我想用Java swing替换Motif。我在Java主事件循环中找不到东西。我的问题是 1)是否可以直接调用Java主循环? 2)我知道Java可以调用另一种语言。另一种语言如何调用Java例程?

--------------补充评论

看起来可能无法做到这一点,至少不是我设想的方式。这是我尝试使用的算法

循环直到终止     做一些内部处理
  1检查ui事件队列    如果队列有事件
  2为所有UI事件调用ui事件调度程序
结束循环

我想知道的是,有什么样的例程可以取代#1和#2。我希望Java有类似EventQueue.hasEvent();的东西     EventQueue.dispatchEvent(event);

从目前为止的评论来看,它看起来并不像是这样。

4 个答案:

答案 0 :(得分:4)

  1. SwingUtilities.invokeAndWait()invokeLater()
  2. JNI can be used将JVM嵌入到本机应用程序中,并通过链接库与其进行通信。但在您的场景中,最好将UI作为一个单独的进程运行,并通过套接字与核心应用程序进行通信。

答案 1 :(得分:1)

不,你不能直接调用GUI主事件循环;但是,您可以将项目提交到主事件循环,最终在其主题上运行。

主事件循环在GUI中做了很多事情,其中​​一些是调度绘制图形,接受输入等。这是一个设计选择,Java采用了多线程模型,其中非-GUI代码不在GUI事件循环中运行。其背后的原因可能是由于GUI循环可能暂停或损坏导致GUI性能问题。

答案 2 :(得分:0)

你应该看一下Java Native Interface(问题2;))

答案 3 :(得分:0)

您可以重新设计您的应用程序以作为Java应用程序运行,并通过JNI调用您的Fortran内容。然后在您的Java应用程序中,您可以Toolkit.getDefaultToolkit().getSystemEventQueue()获取系统event queue,并调用peekEventpostEvent