如何从正在运行的线程中获取字符串?

问题描述

我正在使用 RXTX API 从传感器获取数据。 https://web.archive.org/web/20200530110106/rxtx.qbang.org/wiki/index.php/Event_Based_Two_Way_Communication

我复制粘贴了代码,到目前为止它有效。如何将接收到的数据存储在字符串中?

//I can't store the word anywhere
public static void main ( String[] args )
    {
        try
        {
            (new TwoWaySerialComm()).connect("COM3");
        }
        catch ( Exception e )
        {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }
    }

我想这样:

public static void main ( String[] args )
    {
        try
        {
            String data = (new TwoWaySerialComm()).connect("COM3");
            System.out.println("My sensor data: " + data);
        }
        catch ( Exception e )
        {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }
    }

非常感谢。

解决方法

如果你需要从新线程返回任何东西或抛出异常,你需要使用 java.util.concurrent.Callable 接口创建一个线程并实现 call() 方法。

它类似于Runnable。但是,启动 Thread 的过程略有不同,因为 Thread 类没有任何接受 Callable 对象的构造函数。

    Callable<String> callable = () -> {
        // do stuff
        return "String that your want to return";
    };

    FutureTask<String> task = new FutureTask<>(callable);
    new Thread(task).start();
    System.out.println(task.get());