日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺談Java和JavaFX之間的互操作性

從JavaFX官方博客上讀了一篇文章,是討論從Java代碼中調(diào)用JavaFX類的方法?,F(xiàn)在的情況是,JavaFX可以調(diào)用Java的類,基本沒(méi)有什么限制,而反過(guò)來(lái),Java卻不可以隨便調(diào)用JavaFX的類。這點(diǎn)可以從JavaFX項(xiàng)目的編譯過(guò)程看出原因。以NetBeans為例,Build的過(guò)程是先編譯Java代碼(javac),然后才是JavaFX代碼(javafxc),這樣一來(lái),Java代碼不知道有JavaFX類,而JavaFX類卻可以”看見(jiàn)”Java類。搜索一下我們可以發(fā)現(xiàn),很多程序員都在尋找各種從Java中調(diào)用JavaFX類的方法。有一篇有趣的(英文)文章是介紹如何通過(guò)反向工程來(lái)分析JavaFX類的結(jié)構(gòu)。就連那篇JavaFX官網(wǎng)上的文章,也采用了非標(biāo)準(zhǔn)的API來(lái)實(shí)現(xiàn)這一目的,而且也”保證”這種方法肯定會(huì)在下一版本中失效。

那么我們到底需不需要Java和JavaFX之間的這種互操作性呢?我覺(jué)得這種互操作性是很有必要的。如果兩者可以近似于可以混用的程度,從長(zhǎng)遠(yuǎn)上看,JavaFX可以有更大的生命力。試想一下運(yùn)用MVC的設(shè)計(jì)模式(Model-View-Controller),我們可以用Java和JavaFX結(jié)合在一起開(kāi)發(fā)應(yīng)用:用Java來(lái)寫(xiě)”M”和”C”兩部分,用JavaFX來(lái)寫(xiě)”V”部分,這將是非常有趣的一件事情。

目前,有幾種”標(biāo)準(zhǔn)”的方法來(lái)從Java調(diào)用JavaFX。

1. 使用ScirptEngineManager類,的文章提到,我們可以這樣做:

package calc;
import java.io.InputStreamReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class CalculatorLauncher {
public static void main(String[] args) {
try {
ScriptEngineManager manager=new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension("fx");
InputStreamReader reader = new InputStreamReader (CalculatorLauncher.cla
ss.getResourceAsStream("Calculator.fx")); engine.eval(reader); } catch (ScriptException ex) { } } }

但是,這種方法其實(shí)沒(méi)有多大意義,因?yàn)樗褪窍骃ystem.exec(”calc”)那樣做個(gè)系統(tǒng)調(diào)用而已。我覺(jué)得還不如用System.exec(”JavaFX Calculator.fx”)更加直接一些。

2. 采用Java Reflection來(lái)解析JavaFX的bytecode,得到各個(gè)method或?qū)傩裕缓筮M(jìn)行各種調(diào)用。原理上這是可行的。但是由于reflection非常復(fù)雜,使得實(shí)用性大打折扣,同時(shí),代碼也沒(méi)有什么可讀性了。

3. 第三種方法是定義一個(gè)Java的interface,然后在JavaFX中實(shí)現(xiàn)這個(gè) interface。例如:

public interface JavaInterface { ... }

在MyJavaFXClass.fx中, 可以這樣寫(xiě):

public class MyJavaFXClass extends JavaInterface
{ ... }

在Java代碼中,只需按照interface來(lái)調(diào)用JavaFX對(duì)象即可。這種方法可以解決大部分互操作性的問(wèn)題。唯一的麻煩就是必需定義一大堆interface,但是這是我目前位置發(fā)現(xiàn)的一種最好的解決形式。

JavaFX現(xiàn)在是剛發(fā)布的第一版,所以我們無(wú)需對(duì)它苛求太多了。不過(guò)我還是希望JavaFX的設(shè)計(jì)者在下一版本中認(rèn)真考慮這個(gè)問(wèn)題。


網(wǎng)頁(yè)標(biāo)題:淺談Java和JavaFX之間的互操作性
當(dāng)前地址:http://www.dlmjj.cn/article/dhjjjjp.html