2010-10-11 66 views
2

我找不到與此問題相關的任何答案。我想知道這是否可能。這是我的問題。是否有可能調用java主事件循環?

我有一個用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

看起來可能無法做到這一點。至少不是我設想的方式。這裏是我嘗試使用的主循環的算法 – tadpole 2010-10-11 15:22:23

+0

@tadpole:你爲什麼要查看隊列中是否有事件?這部分在Java中確實不太可能,但我不明白爲什麼你認爲你需要它。 – 2010-10-11 15:49:12

+0

如果隊列中沒有事件,則不需要派發事件。有什麼派遣?這是任何UI主事件循環的常用方法。 – tadpole 2010-10-11 16:08:49

回答

1

不,您不能直接調用GUI主事件循環;但是,您可以將項目提交到主事件循環以最終在其線程上運行。

主要事件循環在GUI中做了很多事情,其中​​一些是安排要繪製的圖形,接受輸入等等。這是一個設計選擇,Java使用了多線程模型,其中非GUI代碼不會在GUI事件循環中運行。其背後的原因可能是由於GUI循環可能被暫停或損壞而導致GUI性能問題。

0

可以重塑你的應用程序作爲一個Java應用程序運行,並通過JNI調用您的Fortran東西。然後在您的Java應用程序中,您可以通過Toolkit.getDefaultToolkit().getSystemEventQueue()獲得系統event queue,並將其稱爲peekEventpostEvent

+0

謝謝。到目前爲止,這似乎與我正在嘗試做的事情最相關。雖然我不清楚細節,但這是一個開始。從有限的JNI處理,我看到Java調用其他語言,但沒有其他方式。 – tadpole 2010-10-11 20:17:11

+0

是的,根據定義,JNI有一種方式(來自@ oyo的鏈接):「...所以JVM可以定位和調用本地方法」。另一種方式是「FNI」或類似的東西:) – 2010-10-11 20:39:02

相關問題