所以我得到了一个相当简单的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)