私は学校のためにDieTesterを作る必要があります。ダイスを100回転がし、テーブルチャートと別のテーブルに出力します。 問題は、スレッドがSliderによって設定された時間にスリープ状態にならないことです。 ここに私のDieTester:ループでスレッドスリープ
ここpackage sample.Controllers;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.RunnableFuture;
public class DieTester implements Runnable{
private Thread t;
private String Threadname;
List<Integer> List = new ArrayList();
Random rand = new Random();
long l;
public DieTester(String name){
Threadname = name;
}
public void run() {
for (int n = 0; n < 100; n++) {
try {
Thread.sleep(getTime());
List.add(rand.nextInt(6) + 1);
System.out.println(List.get(n));
} catch (InterruptedException e) {
System.out.println("Error");
}
}
}
public void start(){
if (t == null)
{
t = new Thread (this, Threadname);
t.start();
}
}
public void setTime(double SliderTime){
l = (long) SliderTime;
}
public long getTime(){
return l;
}
}
コントローラ:
package sample.Controllers;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Slider;
public class Controller {
DieTester dice = new DieTester("Time");
double time=0;
EventHandler e = new EventHandler() {
@Override
public void handle(Event event) {
time = TimeSlider.getValue();
}
};
@FXML
Slider TimeSlider = new Slider(50, 2000, 50);
@FXML
public void HandlePauseResumeAction(){
}
@FXML
public void HandleStartAction(){
DieTester die = new DieTester("Start");
die.start();
}
@FXML
public void HandleSlider(){
TimeSlider.valueProperty().addListener((observable, oldValue, newValue) -> {
time = TimeSlider.getValue() * 20;
//System.out.println(time);
dice.setTime(time);
});
System.out.println(dice.getTime());
}
}
スライダと、すべてが適切に設定されています。そして私がgetTime()を呼び出すと、時間が適切に出ますが、スレッドはスリープ状態ではありません。
をやったことで、*のThread.sleep(getTime()); forループではgetTime()ミリ秒の現在のスレッドで確実にスリープしますが、この呼び出しではスリープ時間は少なくとも一定時間は確保されますが、指定された時間後にスレッドが正確に実行されることは保証されません時間。 sleep()メソッドで渡された時間の間、スレッドがスリープ状態になることを保証することができます。そうでない場合、スレッドはInterruptedExceptionを取得して検証できます。 – pbajpai21
_ "スライダーで設定された時間にスレッドが眠れない" _ - それはあまりにも少なすぎるか眠っていませんか?実際のスリープ時間は要求された時間とどのくらい異なりますか?ハードな数字がなければ、何が起こっているのかを推測することは非常に難しいです。 –
スレッドはまったく眠っていないので、あなたの質問は、それはあまりにも眠りません。 – Faalhaaz