rethink

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  11 随笔 :: 0 文章 :: 16 评论 :: 0 Trackbacks

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

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

posted on 2009-02-04 16:12 rethink 阅读(2598) 评论(2)  编辑  收藏 所属分类: java

评论

# re: 基于javafx开发的查找客户端可用串口列表 2009-02-04 19:21 MatthewChen
检测端口有一个时间延迟,简单开个线程,检测完毕再更新到组件上吧,运行效果会好点。  回复  更多评论
  

# re: 基于javafx开发的查找客户端可用串口列表 2013-04-06 17:48 Kingdom
我在串口监听无法更新UI,你解决办法么?求教  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: