程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JavaFX應用問題解答

JavaFX應用問題解答

編輯:關於JAVA

JavaFX是什麼?

“JavaFX腳本是一種聲明式、靜態類型編程語言。它具有一等函數(first-class functions)、聲明式的語法、列表推導(list-comprehensions)及基於依賴關系的增量式求值(incremental dependency-based evaluation)等特征。”JavaFX腳本為多種多樣的操作提供了聲明式、無中間程序邏輯的語法,這些操作包括創建2D動畫、設置屬性或者聲明在模式和視圖對象之間的綁定依賴關系。

什麼樣的函數能夠稱為“first-class functions”?

在編程語言中,我們常常把那些將函數作為一等對象的函數稱為一等函數(first-class functions)。具體地說,就是編程語言支持在程序執行過程中構造新的函數,並將它們存儲在數據結構中作為其它函數的參數的傳入參數,並在函數返回時將它們作為函數值返回。本概念並不涵蓋任何語言和程序的外部函數或者程序,例如通過調用編譯器或者一個eval函數來創建新函數。

這裡提供一等函數的一個簡單示例:map或者mapcar函數,它使用一個函數和一個列表作為參數,然後將通過將函數應用到列表中的每個成員後形成的列表作為返回值。

“declarative syntax”是什麼意思?

與大多數依靠程序和顯式代碼來更新在變量或者屬性之間關系的編程語言不同,聲明式語言允許數值被聲明為另一種方式。

在JavaFX的一個示例:

var a : Number = bind model.attrib/2;

無論何時model.attrib的數值發生改變,a的數值都將自動、透明地更新,更新期間無需調用任何程序。這對於在模式和視圖對象之間綁定依賴關系、控制GUI行為是特別有用的。

“list-comprehensions”是什麼意思?

我們常常把“list-comprehensions”翻譯為“列表推導”。列表推導是在語言級別上支持以多種方式創建、維護列表的方法。

在JavaFX中的一些示例:

var nums = [1,2,3,4];

var nums2 = [1..4]; //same as above

var numsGreaterThanTwo = nums[. > 2];

var numsLessThanFour = select n from n in nums where n < 4;

什麼是"incremental dependency-based evaluation"?

“incremental dependency-based evaluation”譯為“基於依賴關系的增量式求值”。在JavaFX中,屬性值能夠被聲明為依賴於(綁定到)包含其它屬性的表達式。這樣,當某個被引用的屬性數值發生變化時,所有依賴此屬性的屬性都將直接或者間接地改變它們的數值,此過程無需調用任何的中間程序邏輯。這和在Excel之類的電子表格中使用方程式很類似。

這對於那些需要動態維護模式和視圖屬性,而又時常需要復雜的程序邏輯的GUI開發來說非常有用。

“操作(Operation)” vs “函數(function)”

函數與操作之間的不同之處是函數可以遞增地反復求值、可以綁定返回值、綁定參數、綁定變量/屬性,隱性綁定本地變量。

為了進一步說明,請看下面的JavaFX代碼片段:

Class Foo (

attribute zap;

function bar(x) { x + zap }

}

var afoo = Foo { zap: 14 }var zing = 1;

var snap = afoo.bar(zing);

bind dyn = afoo.bar(zing);

我們非常清楚地看到:無論zing和zap如何變化,snap將不會發生變化。而dyn則會隨著zing和zap的變化而改變。因為在zing和zap的數值發生變化時,發生了一個增量式的求值過程:程序將變化的數值傳遞給依賴其的所有函數,並重新計算數值。

JavaFX的授權模式是怎麼的?

JavaFX的開發者很贊同讓用戶發布自己的應用,並堅信開源和社區的力量。但當前的JavaFX版本是在評估授權下發布的,因此並不能夠被重新發布。你當然能夠發布自己編寫的基於JavaFX的應用,但不能夠和JavaFX一起捆綁發布,並需要告之使用者:需要到openjfx項目站點下載JavaFX二進制代碼庫。並且,由於正處於早期的JavaFX代碼還處在評估授權下,因此它不能用於商業用途。當Sun完成了JavaFX的商業化版本開發後,我相信這將會得到改變。

Sun是否規定了發布JavaFX商業化產品的時間線?

很抱歉,目前沒有准確的時間約定,不過馬上就會制定出來。

JavaFX Runtime像JavaFX Script那樣開源嗎?

是的,JavaFX Runtime即將開放源代碼。

在JavaFX和…之間的不同

與F3比較:F3是Form Follows Function的縮寫,這是JavaFX平台從前的名字。

與Java比較:JavaFX 是一種兼容JSR-223的腳本語言。它能夠使用Java類,並從Java類中被調用。

與Java 6.0提供的Scriting Engine比較:Java 6.0提供的Scriting Engine為兼容JSR-223的腳本語言提供了運行平台,JavaFX可以在Java 6.0提供的Scriting Engine上執行。而JavaFX並不依賴於Java 6.0,它可以在任何兼容JSR-223的腳本引擎(比如Javax.script.ScriptEngine)下執行。

與SVG比較:SVG並不是一種程序語言;它是一種數據描述語言。其XML語法對於編程語言來講是非常可怕的。但SVG的交互性、兼容性是令人滿意的。目前JavaFX開發團隊並沒有計劃直接使用SVG。由於SVG和JavaFX都源自舊的PostScript和Java2D向量圖形模式,因此在某種程度上,我們已經在JavaFX中使用了SVG,但目前仍然存在某些值得注意的不兼容性。

Chris Oliver 已經編寫了SVG-to-F3 轉換程序。

與Swing比較:JavaFX是一種編寫Swing應用的新方式,它無需了解swing框架和Java語言。

與Javascript比較:在JavaFX和JavaScript之間唯一相同點就是它們都是兼容JSR-223的腳本語言。

與Ajax比較:AJax是使用了Javascript和異步更新的web浏覽器端技術。它與JavaFX的關系:兩者都是UI相關的技術。但它們在語言和環境上完全不同。

與Savaje OS的關系:Sun正在計劃使用它們購買的Saveje手機系統和JVM來發布JavaFX Mobile,後者能在移動設備上運行JavaFX腳本,它將成為Windows Mobile、Flash Lite的有力競爭者。

我能夠使用JavaFX編寫Java3D應用嗎?它兼容VRML或者X3D標准、Xj3D之類的代碼庫嗎?

沒有原因不能使用。JavaFX能夠和任何第三方代碼庫互操作,並且不需要任何特殊語法。目前JavaFX開發團隊正在進行開發支持Java3D的功能。

JavaFX是一種RCP(Rich ClIEnt Platform) 嗎?

是的。JavaFX不僅能夠用於RCP開發,也能夠用於RIA(Rich internet Applications)開發。

我能夠在web應用中使用JavaFX嗎?

JavaFX能夠用於編寫前端應用、web應用的視圖或者用戶接口,不過這都需要JVM的支持。

JavaFX將代替Java EE中的JSF和JSP嗎?

不,JSF和JSP用於編寫純粹的web應用(對於支持Html的HTTP客戶端來講是可用的),而JavaFX需要位於客戶端的JVM。如果你希望編寫富客戶端的話,那麼就需要在客戶端安裝JRE,JavaFX能夠提供與基於Flash的Flex、基於.Net的Silverlight相同的功能。常見的應用場景是開發運行在公司內網的應用。

JavaFX在運行時需要服務器嗎?

JavaFX是一種關注GUI的腳本語言;它主要用於桌面應用,因此不需服務器。如果你計劃部署JNLP(Java Web Start)的話,那麼你需要一台web服務器。

運行JavaFX需要什麼條件?

兩種條件任選其一:

Java5以上、一個兼容JSR-223的實現、JavaFX代碼庫;

Java6以上、JavaFX代碼庫。

目前有JavaFX可用的編譯器嗎?

OpenFX Compiler是JavaFX編譯器項目,目前已經開放源代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved