最近看到很多关于javafx的文章,觉得javafx针对以前开发客户端程序的不便的确有些提高,所以自己也试着开发个小应用,看看javafx是否能在以后的工作中使用。
一、开发目的
基于b/s结构,在客户端查找可用的串口列表。
二、开发环境
NetBeans IDE 6.5 for JavaFX 1.0,tomcat5,rxtx 2.1-7r2
三、相关资源
1、java串口操作框架,下载 rxtx 2.1-7r2。
2、了解串口操作,参考http://rxtx.qbang.org/wiki/index.php/Examples
3、开发工具,下载 NetBeans IDE 6.5 for JavaFX 1.0
4、了解javafx,参考http://developers.sun.com.cn/javafx/docs/tutorials/
其他资源略
四、编码
1、首先开发串口操作程序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
并在开发的工程中引入RXTXcomm.jar
2、然后开发界面程序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、最后建立一个最简单的web工程,并编写页面程序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项目属性中,在Run配置中选择Run in Browser;在Application配置中选择Self Signed Jar,其他可选。
2、 NB项目目录中,在dist目录中,存在javafxTutorial.html、javafxTutorial.jar、 javafxTutorial_browser.jnlp三个文件和lib目录包括RXTXcomm.jar一个文件。把此目录中所有文件拷贝到刚才建立 好的web工程中,与index.jsp同路径。
六、测试
1、在服务器端,如果不启动tomcat可以直接执行javafxTutorial.html既能看到效果。如果启动tomcat,那么必须修改javafxTutorial_browser.jnlp中的端口号,要与tomcat使用的一致。
2、在客户端,必须拷贝rxtxSerial.dll到 %JRE_HOME%"bin下,然后直接访问服务器链接就可以。
开 发完成后,总体感觉javafx比applet要方便,无论是编码还是部署。但是开发javafx的时候也有很多不方便的地方,比如目前的IDE不支持图 形化开发,虽然支持一些控件的托拽,但终归是代码不够直观;另外,javafx程序发布后在客户端运行得还是有些慢。终归是个新技术,还需要慢慢适应啊。
另外,遗留下来两个问题,看看大家有什么好办法。
1、关于客户端需要拷贝rxtxSerial.dll问题,有没有更加方便的方法。
2、javafx项目打包问题,有没有更好的方法,比如打个包,其他页面就可以直接调用。对了添加一张结果图,比较丑:)