JavaFX不在FX应用程序线程上

JavaFX不在FX应用程序线程上,java,runnable,Java,Runnable,因此,我被分配了一项任务,通过Runnable的多线程处理,让我的应用程序每x秒检查一次客户。所以我把ScheduledExecutorService塞进了我的控制器类,新线程被调用了,这很好,但是每当我尝试发出警报时,我就会收到一个非法状态异常 班级: public class Line implements Runnable { public Line() { System.out.println("I'm made"); } @Overr

因此,我被分配了一项任务,通过Runnable的多线程处理,让我的应用程序每x秒检查一次客户。所以我把ScheduledExecutorService塞进了我的控制器类,新线程被调用了,这很好,但是每当我尝试发出警报时,我就会收到一个非法状态异常

班级:

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是“^”按钮:)我的代表率太低了,所以它没有公开显示。我的朋友,它应该仍然记录在你的个人资料上:)你已经接受了答案,但没有投赞成票,或者我真的看不到,但这很好,主要是它起作用了