JavaFX 新WebService客户端脚本语言
??? 為什么又要一個(gè)腳本語言?
??? 如今腳本語言當(dāng)然受到了很多的壓力。在以前的文章中,我曾經(jīng)寫過Ruby、JavaScript、Python、JavaServer Pages和Linden Scripting Language等Web service客戶端。這些不同的語言共同的目的是嘗試著通過提供一種連接現(xiàn)有組件的簡(jiǎn)單方式來讓復(fù)雜應(yīng)用的編寫變的更加容易。在JFX的情況中,它最關(guān) 心的組件是Swing用戶接口組件,該組件最初出現(xiàn)在Java標(biāo)準(zhǔn)庫(kù)1.2版以補(bǔ)充相當(dāng)原始的Java AWT工具。
??? JFX基礎(chǔ)
??? 這個(gè)語言支持常見的變量類型,比如字符串、整型、浮點(diǎn)型和布爾值。對(duì)于list和array的擴(kuò)展支持的語法,在我看來非常強(qiáng)大。這個(gè)語言還提供了異常的 創(chuàng)建和處理,并且引入了新的想法,即任何對(duì)象可以被拋出,不僅僅是標(biāo)準(zhǔn)的Java Throwable類型。JFX腳本還可以導(dǎo)入Java類、創(chuàng)建Java對(duì)象和調(diào)用他們的方法。
??? JFX對(duì)象通過聲明的方法來創(chuàng)建。這對(duì)于那些為“swing”Java用戶接口類提供簡(jiǎn)化的class非常有用。我們?cè)谙旅娴耐暾_本中查看一下JFX對(duì)象是如何通過聲明的方式來創(chuàng)建的。 import javafx.ui.*;
Frame {
title: "Hello World from JavaFX"
width: 200
height: 80
content: Button {
text: "Hello World"
}
visible: true
}
?在這個(gè)例子中,Frame和Button是用來隱藏將在屏幕上顯示出來的JFrame和JButton對(duì)象的創(chuàng)建細(xì)節(jié)的腳本類型。這個(gè)Frame類有名為“title”、“width”、“height”、“content”和“visible”的公共“屬性”,它們都在聲明中被設(shè)置了。
??? 消息處理問題
?JFX 也有每一個(gè)圖形用戶接口工具都會(huì)遇到的問題。點(diǎn)擊按鈕之類的用戶事件一定不能和需要長(zhǎng)時(shí)間執(zhí)行任務(wù)的事件處理線程綁定,因?yàn)樵谠撊蝿?wù)執(zhí)行的時(shí)候,這個(gè)接口 會(huì)毫無反應(yīng)。JFX提供了“do”和“do later”原語來處理這個(gè)問題。我使用一段腳本來試驗(yàn)JFX顯示出從天氣預(yù)報(bào)服務(wù)站點(diǎn)檢索出來的數(shù)據(jù),其中使用了“do later”。首先,我定義了一個(gè)叫做WeatherData的JFX類。這個(gè)類有兩個(gè)屬性和一個(gè)操作。
import java.net.URL;
import java.lang.StringBuffer ;
import java.lang.System;
import java.io.InputStreamReader;
import java.io.BufferedReader;
class WeatherData ...{
attribute source: String ;
attribute text: String ;
operation update();
}
?注意這個(gè)JFX類的聲明只包括了操作的簽名, <script type="text/javascript"><!-- google_ad_client = "pub-1572879403720716"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text_image"; google_ad_channel ="2957605308"; google_alternate_ad_url ="http://www.pcdog.com/js/336.htm"; google_color_border = "F5FAFA"; google_color_bg = "F5FAFA"; google_color_link = "1F3A87"; google_color_url = "0000FF"; google_color_text = "000000" google_language = 'zh-CN'; //--></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> 真正的代碼分開定義如下: operation WeatherData.update(){
var content = new StringBuffer("");
do later {
var url = new URL( source );
var is = url.openStream();
var reader = new BufferedReader(new InputStreamReader(is));
var line;
while (true) {
line = reader.readLine();
if (line == null) { break;
}
content.append(line);
content.append("/n");
} // end while
is.close();
text = content.toString();
} // end do later
}
??? 現(xiàn)在創(chuàng)建窗口來表示用戶接口。注意這個(gè)Frame被定義成有一個(gè)WeatherData類的本地實(shí)例。其中的URL是用來獲得我所在的縣下周的天氣預(yù)報(bào)。 Frame {
var wdata = WeatherData {
text: "initialized"
source: "http://forecast.weather.gov/MapClick.php?zoneid=TXZ173&TextType=1"
}
title: "Weather Forcast"
width: 400
height: 400
background: cyan
content: BorderPanel {
border: EmptyBorder{ top: 10 left: 10 bottom: 10 right: 10
}
top: Button {
text: "update"
action: operation(){ wdata.update();}
height: 80
}
center: TextArea { text: bind wdata.text
}
} // close content
visible: true
}
??? 當(dāng)這個(gè)按鈕被點(diǎn)擊之后,更新操作被調(diào)用,創(chuàng)建一個(gè)線程來執(zhí)行“do later”中的后續(xù)代碼來填充文本變量。注意TextArea的文本內(nèi)容是通過wdata.text變量的“bind”關(guān)鍵字來定義的。當(dāng)該變量的內(nèi)容 被更新之后,新的文本將自動(dòng)的出現(xiàn)在窗口當(dāng)中。
??? JFX所缺少的東西
??? JFX語言提供的功能當(dāng)中最明顯的缺憾就是少了像處理swing對(duì)象一樣方便的操縱XML數(shù)據(jù)的方法。當(dāng)然你可以創(chuàng)建自己定制的Java類,并在JFX腳本中使用它們,但是如果能夠在處理基于XML的Web service中使用XQuery或者XPath的語法,那么就太方便了。
??? IDE的支持
??? 我在NetBeans 5.5和Eclipse?IDE中都找到了插件。NetBeans的插件提供了對(duì)編輯語法和用法的支持,但是不完全JavaDocs類型的文檔。NetBeans插件不支持圖形接口版面,但是這應(yīng)該不是很難增加。另外一個(gè)商業(yè)的IDE,ReportMill,正在嘗試在他們的報(bào)表設(shè)計(jì)編輯器中支持JFX。
??? 誰將是它的競(jìng)爭(zhēng)對(duì)手?
??? 假設(shè)JFX在使用Swing組件創(chuàng)建富用戶接口方面已經(jīng)做的很好,讓我們想想誰會(huì)與之競(jìng)爭(zhēng)。在我看來,Flash是當(dāng)今Internet上使用得最廣的富用戶接口技術(shù)。Flash擁有巨大的優(yōu)勢(shì),因?yàn)樗鼛缀踉谒械腎nternet用戶瀏覽器上安裝了,并且很容易被升級(jí)。
?幾年前,我注意到了Flex腳本語言,它可以被用于使用XML來定義Flash用戶接口,但是在當(dāng)時(shí)這套開發(fā)工具的許可證費(fèi)用非常昂貴。Adobe收購(gòu)了Macromedia改變了這種狀況,現(xiàn)在有一個(gè)免費(fèi)的Flex編輯器并且計(jì)劃將Flex的“核心”作為開放源代碼項(xiàng)目,而更高級(jí)的工具繼續(xù)作為商業(yè)產(chǎn)品。
??? 結(jié)論
??? Sun的JavaFX還處于開發(fā)的早期階段。雖然有一些IDE的支持,但是我們?nèi)匀蝗鄙僬降奈臋n。憑借著Sun和開放源代碼社區(qū)的支持,JFX在先進(jìn)Web service客戶端的創(chuàng)建中值得考慮
轉(zhuǎn)載于:https://www.cnblogs.com/lanzhi/archive/2008/01/30/6470828.html
總結(jié)
以上是生活随笔為你收集整理的JavaFX 新WebService客户端脚本语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [新功能]Blog首页仅列出标题
- 下一篇: 程序员想找工作怎么办?如果记住这一点,不