2017-01-04 10 views
0

私は設定された秒後に単語から一度に文字を返すために使用するタイマークラスに取り組んでいます。基本的には、JPanelの別のクラスの文字を表示し、1秒後に表示する文字を変更したいと思います。同じクラスのSystem.out.printlnに文字を書き出すことができますが、別のクラスで使用する方法がわからないのは、一度に1文字を返すだけの場合です時間間隔。私は実行メソッドから何も返すことができないので、無効なので、どのように私がこれを解決することができれば大いに感謝します。タイマークラスからの戻り値

package GU4; 
import java.util.Timer; 
import java.util.TimerTask; 
public class TimerTest { 
    Timer timer; 
    private String name; 
    private int i = 0; 
    public TimerTest(int seconds, String name){ 
     timer = new Timer(); 
     timer.schedule(new RemindTask(), seconds*1000, 1000); 
     this.name = name; 

    } 
    class RemindTask extends TimerTask{ 

     public void run() { 
      int length = name.length(); 
      if(i < length){   
      System.out.println(name.charAt(i)); 
      i++; 
      } 
      else{ 
       timer.cancel(); 
      } 
     } 

    } 

public static void main(String[] args) { 
    new TimerTest(2, "Bengt"); 

} 



} 

答えて

0

あなたが選択した任意のタイプのデータを返し、その後、run()メソッド内から呼び出しますrun()方法は​​クラスに別の方法で行うすべてを含めることができます。

0

クラスに、タイマータスクのコールバックである1つの追加パラメータを取得させます。次のようにします。

public TimerTest(int seconds, String name, Consumer<String> callback) 

次に、コールバックを呼び出して、通常は戻す値を渡します。

public void run() { 
     int length = name.length(); 
     if(i < length){ 
      callback.accept(String.valueOf(name.charAt(i)); 
      i++; 
     } else { 
      timer.cancel(); 
     } 
    } 

Java 8を使用している場合は、java.util.function.Consumerクラスが存在します。 (使用してJava 8)

package GU4; 
import java.util.Timer; 
import java.util.TimerTask; 
public class TimerTest { 
    Timer timer; 
    private String name; 
    private int i = 0; 
    private Consumer<String> callback; 
    public TimerTest(int seconds, String name, Consumer<String> callback) { 
     timer = new Timer(); 
     timer.schedule(new RemindTask(), seconds*1000, 1000); 
     this.name = name; 
     this.callback = callback; 
    } 
    class RemindTask extends TimerTask{ 

     public void run() { 
      int length = name.length(); 
      if(i < length){ 
       callback.accept(String.valueOf(name.charAt(i))); 
       i++; 
      } else { 
       timer.cancel(); 
      } 
     } 

    } 

    public static void main(String[] args) { 
     new TimerTest(2, "Bengt", (c)-> { 
      System.out.println("New Val: " + c); 
     }); 
    } 

} 
0

もう一つの方法かもしれません:あなたはのようなもので終わるでしょう

public interface Consumer<T> { 
    void accept(T t); 
} 

はすべて一緒にこれを置く:あなたは、Java 8を使用していない場合のように、あなただけの独自のインターフェースを追加することができますDelayQueueを使用して、適切なタイムアウト後に文字が終了しないようにする必要があります。