小编kor*_*orv的帖子

使用JavaFX进行多线程处理会导致java.lang.IllegalStateException:不在FX应用程序线程上

所以我得到了一个相当简单的JavaFX应用程序,在按下开始按钮时创建并启动2个线程.我还有一个重置按钮,它应该中断线程并清除GUI组件.这似乎工作正常.然后我应该能够按下重置按钮然后再次启动按钮创建2个线程并再次启动它们.这也有效.当这些线程正在执行时,它们正在使用我的回调,将字符串返回给我的Controller类,然后将其添加到listview中.这在我第一次运行应用程序时工作正常,但如果我按清除然后启动,则在向列表视图添加数据时回调会引发错误.java.lang.IllegalStateException: Not on FX application thread

据我所知,每当除了main之外的其他一些线程试图改变一个fx元素时,都会抛出这个.但是为什么我第一次点击开始时工作正常,但是没有点击清除然后重新开始?这是我的代码:

/**
 * Controls GUI and start threads..
 * 
 *
 */
public class Controller implements Initializable {
    @FXML
    private Button btnRun;

    @FXML
    private Button btnReset;

    @FXML
    private TextArea taInput;

    @FXML
    private ListView<String> lwProducer;

    @FXML
    private ListView<String> lwConsumer;

    private boolean sync;
    private Buffer buffer;
    private ObservableList<String> conData;
    private ObservableList<String> proData;
    private Thread consumerThread;
    private Thread producerThread;
    private Runnable producerR;
    private Runnable consumerR;

    /**
     * Initializes elements, sets an initial value for the textbox.
     */ …
Run Code Online (Sandbox Code Playgroud)

java multithreading javafx

2
推荐指数
1
解决办法
2002
查看次数

标签 统计

java ×1

javafx ×1

multithreading ×1