3

RXTX で Netty 4 を使用しようとしています (これが正しく行われたとしても、Netty 3.x では公式にはサポートされていません)。

パイプライン ファクトリを正しくセットアップしたと思いますが、データがシリアル ポートに送信されたときにイベントが生成されません (デバイスから定期的にデータが入ってくることを CoolTerm で確認しました)。

テストに使用するコードは次のとおりです(これは FTDI デバイスのserialPortようなものです)。/dev/tty.usbserial-A100MZ0L

// Configure the client.
final ExecutorService executorService = Executors.newCachedThreadPool();
RxtxChannelFactory rxtxChannelFactory = new RxtxChannelFactory(executorService);
ClientBootstrap bootstrap = new ClientBootstrap(rxtxChannelFactory);

// Set up the pipeline factory.
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
    public ChannelPipeline getPipeline() throws Exception {
        // Create and configure a new pipeline for a new channel.
        ChannelPipeline pipeline = Channels.pipeline();
        pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
        pipeline.addLast("decoder", new StringDecoder());
        pipeline.addLast("encoder", new StringEncoder());
        pipeline.addLast("logger", new LoggerHandler());
        return pipeline;
    }
});

// Start the connection attempt.
ChannelFuture future = bootstrap.connect(new RxtxDeviceAddress(serialPort));

// Wait until the connection is made successfully.
Channel channel = future.awaitUninterruptibly().getChannel();

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

boolean exit = false;
while (!exit) {
    try {
        String line = reader.readLine();
        if ("exit".equals(line)) {
            exit = true;
        }
    } catch (IOException e) {
        // ignore
    }
}

// Close the connection.
channel.close().awaitUninterruptibly();

// Shut down all thread pools to exit.
bootstrap.releaseExternalResources();
4

1 に答える 1

2

最後にそれを機能させました。

結局、私は2つの異なる問題にぶつかりました:

  1. このプログラムは、例外を適切にチェック/報告していませんでした。
  2. エラーgnu.ioの報告に問題がありました。私は以前にそれについてブログを書いていgnu.io.PortInUseException: Unknown Applicationたことが判明し(私のブログは自分自身を助けました-最初)、ラップトップに修正を適用するのを忘れていました。

つまり、/var/lockディレクトリを作成し、プログラムを実行しているユーザーが書き込みできるようにすることを忘れないでください。

私が取得した例外をチェックし、プログラムを実行しているユーザーに適切に通知する方法について誰かが提案を持っている場合、それは素晴らしいことです:-)

于 2012-05-23T06:51:10.960 に答える