最近看到很多關(guān)于javafx的文章,覺(jué)得javafx針對(duì)以前開(kāi)發(fā)客戶端程序的不便的確有些提高,所以自己也試著開(kāi)發(fā)個(gè)小應(yīng)用,看看javafx是否能在以后的工作中使用。
一、開(kāi)發(fā)目的
基于b/s結(jié)構(gòu),在客戶端查找可用的串口列表。
二、開(kāi)發(fā)環(huán)境
NetBeans IDE 6.5 for JavaFX 1.0,tomcat5,rxtx 2.1-7r2
三、相關(guān)資源
1、java串口操作框架,下載 rxtx 2.1-7r2。
2、了解串口操作,參考http://rxtx.qbang.org/wiki/index.php/Examples
3、開(kāi)發(fā)工具,下載 NetBeans IDE 6.5 for JavaFX 1.0
4、了解javafx,參考http://developers.sun.com.cn/javafx/docs/tutorials/
其他資源略
四、編碼
1、首先開(kāi)發(fā)串口操作程序DiscoveringAvailablePorts.java
List result = new ArrayList();
Enumeration thePorts = CommPortIdentifier.getPortIdentifiers();
while (thePorts.hasMoreElements()) {
CommPortIdentifier com = (CommPortIdentifier) thePorts.nextElement();
switch (com.getPortType()) {
case CommPortIdentifier.PORT_SERIAL:
try {
CommPort thePort = com.open("CommUtil", 50);
thePort.close();
result.add(com.getName());
} catch (PortInUseException e) {
System.out.println("Port, " + com.getName() + ", is in use.");
} catch (Exception e) {
System.err.println("Failed to open port " + com.getName());
e.printStackTrace();
}
}
}
return result;
}
注:RXTXcomm.jar 拷貝到: %JAVA_HOME%"jre"lib"ext
rxtxSerial.dll 拷貝到: %JAVA_HOME%"jre"bin
并在開(kāi)發(fā)的工程中引入RXTXcomm.jar
2、然后開(kāi)發(fā)界面程序SerialConfig.fx
new DiscoveringAvailablePorts().getAvailableSerialPortsName();
var label = SwingLabel{text: "serial port: "};
var combobox = SwingComboBox{
width: 100
items:[
SwingComboBoxItem{
text: "Please select

for (idx in portNames) {
SwingComboBoxItem{
text:idx.toString()}
}
]
selectedIndex: 0};
var button = SwingButton{text: "Save"};
Stage {
title: "Components"
width: 344
height: 240
visible: true
scene: Scene{
fill: Color.CORNSILK
content: VBox{
translateX: 10
translateY: 30
spacing: 20
content:[
HBox{
spacing: 10
content:[label,combobox,HBox{ translateX:40 content:[button]}]
}
]
}
}
}
3、最后建立一個(gè)最簡(jiǎn)單的web工程,并編寫(xiě)頁(yè)面程序index.jsp。
This is my JSP page. <br>
<script src="http://dl.javafx.com/dtfx.js"></script>
<script>
javafx(
{
archive: "<%=path%>/javafxTutorial.jar",
width: 400,
height: 200,
code: "com.howelltech.SerialConfig",
name: "javafxTutorial"
}
);
</script>
</body>
五、部署
1、NB項(xiàng)目屬性中,在Run配置中選擇Run in Browser;在Application配置中選擇Self Signed Jar,其他可選。
2、 NB項(xiàng)目目錄中,在dist目錄中,存在javafxTutorial.html、javafxTutorial.jar、 javafxTutorial_browser.jnlp三個(gè)文件和lib目錄包括RXTXcomm.jar一個(gè)文件。把此目錄中所有文件拷貝到剛才建立 好的web工程中,與index.jsp同路徑。
六、測(cè)試
1、在服務(wù)器端,如果不啟動(dòng)tomcat可以直接執(zhí)行javafxTutorial.html既能看到效果。如果啟動(dòng)tomcat,那么必須修改javafxTutorial_browser.jnlp中的端口號(hào),要與tomcat使用的一致。
2、在客戶端,必須拷貝rxtxSerial.dll到 %JRE_HOME%"bin下,然后直接訪問(wèn)服務(wù)器鏈接就可以。
開(kāi) 發(fā)完成后,總體感覺(jué)javafx比applet要方便,無(wú)論是編碼還是部署。但是開(kāi)發(fā)javafx的時(shí)候也有很多不方便的地方,比如目前的IDE不支持圖 形化開(kāi)發(fā),雖然支持一些控件的托拽,但終歸是代碼不夠直觀;另外,javafx程序發(fā)布后在客戶端運(yùn)行得還是有些慢。終歸是個(gè)新技術(shù),還需要慢慢適應(yīng)啊。
另外,遺留下來(lái)兩個(gè)問(wèn)題,看看大家有什么好辦法。
1、關(guān)于客戶端需要拷貝rxtxSerial.dll問(wèn)題,有沒(méi)有更加方便的方法。
2、javafx項(xiàng)目打包問(wèn)題,有沒(méi)有更好的方法,比如打個(gè)包,其他頁(yè)面就可以直接調(diào)用。對(duì)了添加一張結(jié)果圖,比較丑:)