论坛首页 Java企业应用论坛

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

浏览 2568 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-04   最后修改:2009-02-04

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

 

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

 

  • 大小: 9.2 KB
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics