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 閱讀(2615) 評(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)論
            

          主站蜘蛛池模板: 东宁县| 盖州市| 灌南县| 贡嘎县| 噶尔县| 高淳县| 临武县| 宕昌县| 巴林左旗| 万山特区| 陕西省| 金坛市| 阿巴嘎旗| 晋中市| 静安区| 牙克石市| 仁怀市| 徐闻县| 泰安市| 安国市| 巴马| 临颍县| 宿州市| 永靖县| 湄潭县| 上犹县| 兴海县| 邵武市| 图片| 通城县| 双江| 瓦房店市| 云浮市| 涞源县| 漯河市| 浦县| 大荔县| 墨玉县| 瓦房店市| 札达县| 杂多县|