2017-01-05 4 views
1

私はRunnableを使ってマルチスレッドでx秒ごとにお客様のアプリケーションチェックを行うように割り当てられています。だから私はScheduledExecutorServiceを私のコントローラクラスに詰め込み、新しいスレッドが呼び出されて、それがすべてダンディですが、警告を出すときはいつでもIllegalStateExceptionを取得します。JavaFXはFXアプリケーションスレッドではありません

クラス:)

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には、実行は(ありません文句を言う:

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(); 
     } 
    } 
} 

私はそうのようなPlatform.runLaterのものに全体の実行()関数を入れて試してみました。

誰でもどのようにこれを行うに考えましたか?コードはScheduledExecutorServiceからx秒ごとに呼び出されなければならず、警告はrun()関数内で行われなければなりません。

+0

'しかし、その後のRunnableは何のラン(ありません文句を言う'あなたはそれを表示することができますか? –

+0

これは、すべてのメソッドが実装されているわけではなく、run()メソッドを追加するか、またはクラスを抽象クラスにすることを提案しています。 また、少し混乱させてしまったかもしれませんが、私が使った2番目のスニペットは、Lineクラスで使用されています。私はこれに本当に新しいので、私はどのようにPlatform.runLaterのものを使用するのか分からない。 – Amalah

+0

あなたのrunLaterの使い方は正しいと思います。そのエラーがどこで発生するのか分かりません。 –

答えて

0

あなたは2つの異なるRunnableに混乱しています。あなたのラインはRunnableを実装しており、スケジューラによって実行されるrunを実装する必要があります。しかし、あなたが戻ってあなたがそれを別のRunnableを実装、ラを渡す必要がFXスレッドへのUIの仕事を中継することを与えられた:。)

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(); 
       } 
      }}); 
    } 
} 
+0

作品、喝采! +1 – Amalah

+0

plus1は^ボタンです:) –

+0

私はあまりにも低い担当者を持っていますので、私の友人に公開されているわけではありませんが、まだあなたのプロフィールに記録する必要があります:) – Amalah

関連する問題