日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10年時間我們累計服務(wù)了上千家以及全國政企客戶,如鑿毛機等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致表揚。

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

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

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

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.class.getResourceAsStream("Calculator.fx"));
 engine.eval(reader);
   } catch (ScriptException ex) {
  }
 }
}

但是,這種方法其實沒有多大意義,因為它就是象System.exec("calc")那樣做個系統(tǒng)調(diào)用而已。我覺得還不如用System.exec("javafx Calculator.fx")更加直接一些。

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

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

public interface JavaInterface
{ ... }
在 MyJavaFXClass.fx中, 可以這樣寫:

public class MyJavaFXClass extends JavaInterface
{ ... }

在java代碼中,只需按照interface來調(diào)用JavaFX對象即可。例如:

JavaMain.java

public class JavaMain {
  public static Object start( JavaInterface ji){
    return ji.createStage();
  }
}

JavaInterface.java

public interface JavaInterface {
  public Object createStage();
}

MyStage.fx

public class MyStage extends JavaInterface {

  public override function createStage(): Object{

    Stage {
      title: "Application title"
      width: 250
      height: 80
      scene: Scene {
        content: Text {
          font: Font {
            size: 24
          }
          x: 10,
          y: 30
          content: "Application content"
        }
      }
}
  }

Main.fx

var mys = MyStage{};
JavaMain.start(mys);

這種方法可以解決大部分互操作性的問題。唯一的麻煩就是必需定義一大堆interface,但是這是我目前位置發(fā)現(xiàn)的一種最好的解決形式。 JavaFX現(xiàn)在是剛發(fā)布的第一版,所以我們無需對它苛求太多了。不過我還是希望javaFX的設(shè)計者在下一版本中認真考慮這個問題。

【責(zé)任編輯:志京 TEL:(010)68476606】


本文標(biāo)題:JavaFX和Java之間的互操作性
新聞來源:http://m.5511xx.com/article/coocgss.html