基于javafx开发的查找客户端可用串口列表

基于javafx开发的查找客户端可用串口列表

最近看到很多关于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

     public   static  List getAvailableSerialPortsName() {
        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

var portNames  =
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]}]
            }
            ]
        }
    }
}
 注:开发上面的程序时候,在NB中建立javafx项目,名称javafxTutorial。


3、最后建立一个最简单的web工程,并编写页面程序index.jsp。


   < body >
    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项目打包问题,有没有更好的方法,比如打个包,其他页面就可以直接调用。

对了添加一张结果图,比较丑:)

你可能感兴趣的:(基于javafx开发的查找客户端可用串口列表)