成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaFX和Java之間的互操作性

企業動態 后端
JavaFX和Java互操作性是很有必要的,JavaFX可以有更大的生命力。

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

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

目前,有幾種"標準"的方法來從Java調用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")那樣做個系統調用而已。我覺得還不如用System.exec("javafx Calculator.fx")更加直接一些。

2) 采用Java Reflection來解析JavaFX的bytecode,得到各個method或屬性,然后進行各種調用。原理上這是可行的。但是由于reflection非常復雜,使得實用性大打折扣,同時,代碼也沒有什么可讀性了。

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

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

public class MyJavaFXClass extends JavaInterface
{ ... }


在java代碼中,只需按照interface來調用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,但是這是我目前位置發現的一種最好的解決形式。 JavaFX現在是剛發布的第一版,所以我們無需對它苛求太多了。不過我還是希望javaFX的設計者在下一版本中認真考慮這個問題。

【編輯推薦】

  1. JavaFX 1.2 已經發布 主要新功能一覽
  2. RIA之爭 JavaFX是否能后來居上?
  3. JavaFX市場收效甚微 需尋找新突破
  4. JavaFX對Java開發者到底意味著什么
  5. JavaFX,Flex和Silverlight橫向對比


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

責任編輯:佚名 來源: JavaFXBlogs
相關推薦

2009-02-04 17:11:28

JavaFXJava兼容性

2010-03-17 12:32:07

ASP.NETjQuery開源社區

2023-10-13 09:00:00

云計算架構

2020-03-03 21:13:20

物聯網融合互操作

2017-02-06 11:50:12

NFV操作性測試

2017-02-06 14:34:24

NFV網絡功能MANO

2012-09-07 09:51:07

云互操作性云可移植性云計算服務

2019-01-07 05:56:23

NFV網絡功能虛擬化API

2010-02-24 15:27:04

ibmdwMashup

2009-07-17 13:49:57

Windows Emb

2018-02-27 15:41:27

IOT語義操作性

2021-08-19 14:12:30

物聯網數據結構IoT

2011-06-15 10:09:31

云計算互操作混合云

2023-12-27 14:50:10

2012-05-15 16:21:25

2015-06-16 09:19:12

OpenStackUnitedStack互操作

2018-03-21 16:38:19

IOT語義API

2023-06-15 15:40:36

2020-02-14 08:00:00

WindowsLinuxSamba

2018-10-17 10:46:54

區塊鏈互操作性比特幣
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美九九 | 亚洲人成人一区二区在线观看 | 亚洲精品一区在线 | 91啪影院 | 玖玖视频 | 91免费版在线 | 亚洲 精品 综合 精品 自拍 | 日韩欧美在线观看视频 | 美国av毛片| 久草电影网| 久久精品国产亚洲 | 国产精品一区二区欧美 | 国产精品久久久久一区二区三区 | 日本不卡免费新一二三区 | 久久久久久国产免费视网址 | 欧美日韩综合 | 精品一区二区三区在线视频 | 欧产日产国产精品v | 欧美 日韩 中文 | 国产欧美在线观看 | 中文字幕欧美一区 | 亚洲综合日韩精品欧美综合区 | 国产精品一区二区久久 | 男女免费观看在线爽爽爽视频 | 免费色网址 | 99久久精品免费 | 久久精品一级 | 小h片免费观看久久久久 | 久久大陆 | xxxxxx国产| 天天天操操操 | 成人在线不卡 | www国产精品 | 国产成人福利 | 亚洲性网| 精品一二三区在线观看 | 国产精品色 | 欧美日韩精品国产 | 青草视频在线 | av中文在线观看 | 高清国产午夜精品久久久久久 |