<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rethink

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      11 隨筆 :: 0 文章 :: 16 評(píng)論 :: 0 Trackbacks

    最近看到很多關(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

        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

    并在開(kāi)發(fā)的工程中引入RXTXcomm.jar


    2、然后開(kāi)發(fā)界面程序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]}]
                }
                ]
            }
        }
    }
     注:開(kāi)發(fā)上面的程序時(shí)候,在NB中建立javafx項(xiàng)目,名稱javafxTutorial。


    3、最后建立一個(gè)最簡(jiǎn)單的web工程,并編寫(xiě)頁(yè)面程序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項(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é)果圖,比較丑:)

    posted on 2009-02-04 16:12 rethink 閱讀(2610) 評(píng)論(2)  編輯  收藏 所屬分類: java

    評(píng)論

    # re: 基于javafx開(kāi)發(fā)的查找客戶端可用串口列表 2009-02-04 19:21 MatthewChen
    檢測(cè)端口有一個(gè)時(shí)間延遲,簡(jiǎn)單開(kāi)個(gè)線程,檢測(cè)完畢再更新到組件上吧,運(yùn)行效果會(huì)好點(diǎn)。  回復(fù)  更多評(píng)論
      

    # re: 基于javafx開(kāi)發(fā)的查找客戶端可用串口列表 2013-04-06 17:48 Kingdom
    我在串口監(jiān)聽(tīng)無(wú)法更新UI,你解決辦法么?求教  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 国产一级一片免费播放i| 久久亚洲精品中文字幕无码| 黄色a三级免费看| 久久亚洲精品国产精品黑人| 搡女人真爽免费视频大全| 十八禁的黄污污免费网站| 亚洲成亚洲乱码一二三四区软件| 精品免费久久久久久久| 日韩免费码中文在线观看| 亚洲视频在线播放| 国产在线观看免费不卡| 一级成人a毛片免费播放| 在线观看免费亚洲| 久久亚洲AV无码精品色午夜麻豆| 国产成人一区二区三区免费视频| 精品视频一区二区三区免费| 亚洲av中文无码字幕色不卡| 亚洲AV无一区二区三区久久| 蜜臀91精品国产免费观看| 免费精品一区二区三区第35| 羞羞漫画页面免费入口欢迎你| 亚洲精品第一国产综合精品| 亚洲天堂在线视频| 好男人看视频免费2019中文| 精品国产麻豆免费人成网站| 污视频网站免费观看| 亚洲一级毛片在线播放| 国产V亚洲V天堂无码久久久| 免费在线观看黄网站| www.999精品视频观看免费| 天堂在线免费观看| 美女被艹免费视频| 亚洲字幕AV一区二区三区四区| 亚洲色偷偷av男人的天堂| 国产亚洲精aa成人网站| 波多野结衣久久高清免费 | 国产精品网站在线观看免费传媒 | 九九久久精品国产免费看小说| 亚洲一区在线视频观看| 亚洲成a人片77777老司机| 亚洲一区二区三区AV无码|