1

こんにちは、私はこのようなものを持っています

package compot;

import java.util.Enumeration;
import gnu.io.*;


public class core {

    private static SerialPort p;

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();
        System.out.println("start");
        while(ports.hasMoreElements())
        {
            CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
            System.out.print(port.getName() + " -> " + port.getCurrentOwner() + " -> ");
            switch(port.getPortType())
            {
                case CommPortIdentifier.PORT_PARALLEL:
                    System.out.println("parell");
                break;
                case CommPortIdentifier.PORT_SERIAL:
                    //System.out.println("serial");
                try {
                    p = (SerialPort) port.open("core", 1000);
                    int baudRate = 57600; // 57600bps
                    p.setSerialPortParams(
                            baudRate,
                            SerialPort.DATABITS_8,
                            SerialPort.STOPBITS_1,
                            SerialPort.PARITY_NONE);
                } catch (PortInUseException e) {
                    System.out.println(e.getMessage());
                } catch (UnsupportedCommOperationException e) {
                    System.out.println(e.getMessage());
                }
                break;
            }
        }
        System.out.println("stop");
    }
}

しかし、ポートから読み取る方法がわかりません?? このチュートリアルを読みましたが、「デモ アプリケーション」の意味がわかりません。

編集

OutputStream outStream = p.getOutputStream();
                    InputStream inStream = p.getInputStream();

                    BufferedReader in = new BufferedReader( new InputStreamReader(inStream));
                    String inputLine;

                    while ((inputLine = in.readLine()) != null) 
                        System.out.println(inputLine);
                    in.close();

このコードを追加しましたが、受け取りました

安定したライブラリ ======================================== ネイティブ lib バージョン = RXTX-2.1 -7 Java lib バージョン = RXTX-2.1-7 start /dev/ttyUSB3 -> null -> 基になる入力ストリームが 0 バイトを返しました stop

4

3 に答える 3

7

これはあなたのコードですか?あなたは実際にそこで何をしようとしていますか?:p

SerialPortから読み取るには、次のポートを宣言する必要があります。

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/tty/USB0"); //on unix based system

次に、このポートで接続を開きます。

SerialPort serialPort = (SerialPort) portIdentifier.open("NameOfConnection-whatever", 0);

次のステップは、このポートのパラメーターを設定することです(必要な場合)。

serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

これは私の設定です-それに応じてあなたの設定は異なるかもしれません:)

これで、このポートでいくつかのデータを読み取る準備ができました。データを取得するには、serialPorts入力ストリームを取得し、そこから読み取る必要があります。

InputStream inputStream = serialPort.getInputStream();
while (active) {
        try {
            byte[] buffer = new byte[22];
            while ((buffer[0] = (byte) inputStream.read()) != 'R') {
            }
            int i = 1;
            while (i < 22) {
                if (!active) {
                    break;
                }
                buffer[i++] = (byte) inputStream.read();
            }
            //do with the buffer whatever you want!
        } catch (IOException ex) {
            logger.error(ex.getMessage(), ex);
        }
}

ここで実際に行っているのは、そのメソッドを使用して入力ストリームから読み取ることですread()。これは、データが利用可能になるまでブロックするか、ストリームの終わりに達した場合は-1を返します。この例では、「R」文字を取得するまで待ってから、次の22バイトをバッファーに読み込みます。そして、それはあなたがデータを読む方法です。

  1. serialPorts入力ストリームを取得します
  2. .read()メソッドを使用する
  3. それをすべてループ内に置き、キャンセルするとループを終了します(私の場合、はactive別の方法でfalseに設定して、読み取りプロセスを終了することができます。

お役に立てれば

于 2011-07-20T12:15:18.187 に答える
2

使ってみて

if (socketReader.ready()) {
}

バッファストリームに読み取るものがある場合にのみソケットが応答するようにして、例外が発生しないようにします。

于 2011-10-07T10:15:05.683 に答える
0

あなたのtryブロックでこのようなもの:

OutputStream outStream = p.getOutputStream();
InputStream inStream = p.getInputStream();
于 2011-07-20T12:13:11.700 に答える