我找不到与此问题相关的任何答案。我想知道是否有可能。这是我的问题。
我有一个用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);
从目前为止的评论来看,它看起来并不像是这样。
答案 0 :(得分:4)
SwingUtilities.invokeAndWait()
和invokeLater()
答案 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,并调用peekEvent
和postEvent
。