1

シリアル ポートからバイト ストリームを読み取るコードを実行しました。問題は、これらのポートとやり取りするデバイスを持っていないため、コードをテストできないことです。

既にエミュレーターを使用していますが、コードとエミュレーターを実行しても何も起こりません。進行状況もエラーもありません。

ここにコードがあります

class SimpleRead implements Runnable, SerialPortEventListener{
    CommPortIdentifier portId;
    Enumeration       portList;
    InputStream           inputStream;
    SerialPort            serialPort;
    Thread            readThread;

    /**
     * Method declaration
     *
     *
     * @param args
     *
     * @see
     */
    public void main(String[] args) {
    boolean           portFound = false;
    String            defaultPort = "/dev/term/a";

    if (args.length > 0) {
        defaultPort = args[0];
    } 

    portList = CommPortIdentifier.getPortIdentifiers();

    while (portList.hasMoreElements()) {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        if (portId.getName().equals(defaultPort)) {
            jTextArea1.setText("Found port: "+defaultPort);
            portFound = true;
            SimpleRead reader = new SimpleRead();
        } 
        } 
    } 
    if (!portFound) {
        jTextArea1.setText("port " + defaultPort + " not found.");
    } 

    } 

    /**
     * Constructor declaration
     *
     *
     * @see
     */
    public SimpleRead() {
    try {
        serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
    } catch (PortInUseException e) {}

    try {
        inputStream = serialPort.getInputStream();
    } catch (IOException e) {}

    try {
        serialPort.addEventListener(this);
    } catch (TooManyListenersException e) {}

    serialPort.notifyOnDataAvailable(true);

    try {
        serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
                       SerialPort.STOPBITS_1, 
                       SerialPort.PARITY_NONE);
    } catch (UnsupportedCommOperationException e) {}

    readThread = new Thread(this);

    readThread.start();
    }

    /**
     * Method declaration
     *
     *
     * @see
     */
    public void run() {
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {}
    } 

    /**
     * Method declaration
     *
     *
     * @param event
     *
     * @see
     */
    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:
        break;

    case SerialPortEvent.DATA_AVAILABLE:
        byte[] readBuffer = new byte[20];

        try {
        while (inputStream.available() > 0) {
            int numBytes = inputStream.read(readBuffer);
        } 

        jTextArea1.setText(new String(readBuffer));
        } catch (IOException e) {}

        break;
    }
    } 

}

注: javax.comm と Netbeans IDE を使用しています。ありがとうございました

4

3 に答える 3

2

問題は、これらのポートとやり取りするデバイスがないため、コードをテストできないことです..

唯一の本当の解決策は、いくつかのデバイスを入手することです。真剣に、エミュレーターでテストしても、エミュレーターが機能すると仮定しても、これまでのところしか得られません。実際のデバイスでテストしていないコードを販売または提供することは、まったく無責任です。

于 2012-08-16T12:12:09.617 に答える
1

コンピュータの 2 つのシリアル ポート間にヌル モデム ケーブル (クロス ケーブル) を接続するか、1 つしかない場合は、別のコンピュータからケーブルを配線します。

ここで、ヌル モデム ケーブルを介してデータをプッシュする送信プログラムを作成するか、別の方法を使用してデータをプッシュします。たとえば、Linux では、ファイルをシリアル ポートに cat できます: cat data.dat > /dev/ttyS0

于 2012-08-16T12:32:38.883 に答える
0

実際のデバイスでテストする必要があります。そうしないと、テストにほとんど価値がありません。シリアルポート付きの PCI カードを購入するだけで、約 5 ドルで入手できます。

于 2012-08-16T12:15:03.453 に答える