JavaFX不在FX应用程序线程上
因此,我被分配了一项任务,通过Runnable的多线程处理,让我的应用程序每x秒检查一次客户。所以我把ScheduledExecutorService塞进了我的控制器类,新线程被调用了,这很好,但是每当我尝试发出警报时,我就会收到一个非法状态异常 班级:JavaFX不在FX应用程序线程上,java,runnable,Java,Runnable,因此,我被分配了一项任务,通过Runnable的多线程处理,让我的应用程序每x秒检查一次客户。所以我把ScheduledExecutorService塞进了我的控制器类,新线程被调用了,这很好,但是每当我尝试发出警报时,我就会收到一个非法状态异常 班级: public class Line implements Runnable { public Line() { System.out.println("I'm made"); } @Overr
public class Line implements Runnable
{
public Line()
{
System.out.println("I'm made");
}
@Override
public void run()
{
System.out.println("I've started");
try
{
Alert alert = new Alert(AlertType.ERROR, "Line is empty");
alert.setTitle("Error");
alert.setHeaderText("Line empty");
System.out.println("I've ended");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
我尝试将整个run()函数放入Platform.runLater中,如下所示:
Platform.runLater(new Runnable() {
@Override
public void run()
{
System.out.println("I've started");
try
{
Alert alert = new Alert(AlertType.ERROR, "Line is empty");
alert.setTitle("Error");
alert.setHeaderText("Line empty");
System.out.println("I've ended");
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
但是Runnable抱怨说没有run()
有人知道怎么做吗?必须通过ScheduledExecutorService每隔x秒调用一次代码,并且必须在run()函数中发出警报。您被两个不同的
可运行的弄糊涂了。您的行实现了Runnable
,因此必须实现将由调度程序执行的run
。但如果您想将UI工作中继回FX线程,则需要将另一个可运行的实现传递给它,即la:
public class Line implements Runnable
{
public Line()
{
System.out.println("I'm made");
}
@Override
public void run()
{
Platform.runLater(new Runnable() {
@Override
public void run()
{
System.out.println("I've started");
try
{
Alert alert = new Alert(AlertType.ERROR, "Line is empty");
alert.setTitle("Error");
alert.setHeaderText("Line empty");
System.out.println("I've ended");
} catch (Exception e) {
e.printStackTrace();
}
}});
}
}
但是Runnable抱怨没有run()。
你能展示一下吗?它说并不是所有的方法都实现了,并且提供了添加run()方法或使类抽象化的功能。另外,我可能会让您有点困惑,我使用的第二个代码片段仍然在Line类中使用,而不是在代码中需要使用它的其他地方。我真的是一个新手,所以我甚至不知道如何使用Platform.runLater。你使用runLater是正确的,我不知道你从哪里得到这个错误。你需要发布完整的堆栈,如果IllegalStateException,这将帮助洛蒂得到这个。我可能做错了。加号1是“^”按钮:)我的代表率太低了,所以它没有公开显示。我的朋友,它应该仍然记录在你的个人资料上:)你已经接受了答案,但没有投赞成票,或者我真的看不到,但这很好,主要是它起作用了