2016-06-23 10 views
0

Linux(Ubuntu 12.10)で開発しているJavaアプリケーションのシリアルデータを読み込もうとしています。これは私のコードです:JavaのCOMポートからシリアルデータを読み取ることができません

try { 
    portId = CommPortIdentifier.getPortIdentifier("/dev/ttyS0"); 
    SimpleRead reader = new SimpleRead(); 
} catch (Exception e) { 
    TimeStamp=new Date().toString(); 
    System.out.println(TimeStamp+": ttyS0 "+portId); 
    System.out.println(TimeStamp+": msg1 - "+e); 
} 

SimpleReadコンストラクタと他の必要なコード:何らかの理由で

public SimpleRead() { 
    try { 
     TimeStamp=new Date().toString(); 
     serialPort = (SerialPort) portId.open("SimpleRead", 2000); 
     System.out.println(TimeStamp + ": " + portId.getName() + " opened for scanner input"); 
    } catch (PortInUseException e) { 
     System.out.println(e); 
    } 
    try { 
     inputStream = serialPort.getInputStream(); 
    } catch (IOException e) { 
     System.out.println(e); 
    } 
    System.out.println("Input Stream set"); 
    try { 
     serialPort.addEventListener(this); 
    } catch (TooManyListenersException e) { 
     System.out.println(e); 
    } 
    System.out.println("Event listener added"); 
    serialPort.notifyOnDataAvailable(true); 
    try { 
     serialPort.setSerialPortParams(9600, 
       SerialPort.DATABITS_8, 
       SerialPort.STOPBITS_1, 
       SerialPort.PARITY_NONE); 
     serialPort.setDTR(false); 
     serialPort.setRTS(false); 
    } catch (UnsupportedCommOperationException e) { 
     System.out.println(e); 
    } 
    System.out.println("Parameters written"); 
    readThread = new Thread(this); 
    readThread.start(); 
} 

@Override 
public void run() { 
    try { 
     Thread.sleep(100); 
    } catch (InterruptedException e) { 
     System.out.println(e); 
    } 
} 

@Override 
public void serialEvent(SerialPortEvent event) { 
    switch(event.getEventType()) { 
     case SerialPortEvent.BI: 
     case SerialPortEvent.OE: 
     case SerialPortEvent.FE: 
     case SerialPortEvent.PE: 
     case SerialPortEvent.CD: 
     case SerialPortEvent.CTS: 
     case SerialPortEvent.DSR: 
     case SerialPortEvent.RI: 
     case SerialPortEvent.OUTPUT_BUFFER_EMPTY: 
      System.out.println("Hello"); 
      break; 
     case SerialPortEvent.DATA_AVAILABLE: 
      byte[] readBuffer = new byte[20]; 
      System.out.println("Hello"); 
      try { 
       while (inputStream.available() > 0) { 
        int numBytes = inputStream.read(readBuffer); 
        if (numBytes>=16) 
         break; 
       } 
       //System.out.print(new String(readBuffer)); 
       TimeStamp = new java.util.Date().toString(); 
       System.out.println(TimeStamp + ": scanned input received:" + new String(readBuffer)); 
       inputStream.close(); 
      } catch (IOException e) { 
       System.out.println(e); 
      } 
      break; 
    } 
} 

、ポートから読み取られて何のシリアル・データは、「こんにちは」の本体であるため、存在しませんserialEvent()メソッドは出力画面に表示されません。私をここで助けてください!取ら

EDITコード:http://www.java-samples.com/showtutorial.php?tutorialid=11 そして、はい、デバイスは、それから読み取ろうとする前に、与えられたパラメータ用に設定されました。

新しい編集私はJava SE 8開発キットfor Linux x64プラットフォームとJava Communications APIをhttp://www.java2s.com/Code/Jar/c/Downloadcomm20jar.htmから取得しています。私のIDEはNetbeans 8.1です。

答えて

0

したがって、シリアルポートにアクセスするためにJava 1.8の32ビットバージョンを使用する必要があることが判明しました。 Linux上の私のIDEは、強制的に(netbeans.confファイルの "jdk_home"パスを変更することによって)64ビットマシン上の32ビットライブラリを受け入れないため、シリアルポートへのアクセスに問題があった。

Windows上のNetbeans IDE 8.1は、それぞれのソースライブラリで64ビットモードと32ビットモードの両方で動作できるので、私はまだ64ビットシステムになっていますが、オペレーティングシステムをWindows 7に切り替えました。そこで、Windows用のJDK 1.8(32ビット)をインストールしてから、コードをIDEで実行しました(Javax.comm API on 64-bit Windowsを参照してください)。これで、シリアルポートからのデータが正しく読み込まれます。

関連する問題