私はJavaで何かをやろうとしていて、whileループの中で数秒間待つ/遅らせるものが必要です。
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
私はステップシーケンサーを作りたいのですが、私はJavaが初めてです。助言がありますか?
一時停止したい場合はJava.util.concurrent.TimeUnit
を使用してください。
TimeUnit.SECONDS.sleep(1);
1秒間寝る
TimeUnit.MINUTES.sleep(1);
ちょっと寝る。
これはループなので、これは本質的な問題 - ドリフト - を提示します。コードを実行してからスリープするたびに、実行から少しずつ漂っていくでしょう。これが問題であればsleep
を使わないでください。
さらに、sleep
は制御に関してはあまり柔軟ではありません。
毎秒または1秒の遅れでタスクを実行するには、 strong ScheduledExecutorService
および scheduleAtFixedRate
または scheduleWithFixedDelay
のいずれかをお勧めします。
たとえば、メソッドmyTask
を毎秒実行するには(Java 8):
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
そしてJava 7では:
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
Thread.sleep(1000)
を使用してください。
1000
は、プログラムが一時停止するミリ秒数です。
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
Thread.sleep()
呼び出しを使う必要があります。
ここでより多くの情報: http://docs.Oracle.com/javase/tutorial/essential/concurrency/sleep.html
thread.sleep(100)を使用してください。時間の単位はミリ秒です
例として
public class SleepMessages {
public static void main(String args[])
throws InterruptedException {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
for (int i = 0;
i < importantInfo.length;
i++) {
//Pause for 4 seconds
Thread.sleep(4000);
//Print a message
System.out.println(importantInfo[i]);
}
}
}
私はこれが非常に古い投稿であることを知っていますが、これは誰かを助けるかもしれません:メソッドを作成できますので、一時停止する必要があるときはいつでもpause(1000)
または他のミリ秒値を入力できます:
public static void pause(int ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
System.err.format("IOException: %s%n", e);
}
}
これは、クラス内のpublic static void main(String[] args)
のすぐ上に挿入されます。次に、メソッドを呼び出すには、pause(ms)
と入力しますが、ms
を一時停止するミリ秒数に置き換えます。そうすれば、一時停止するたびにtry-catchステートメント全体を挿入する必要がなくなります。
`
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
try{Thread.sleep(time_in_milliseconds);}catch(InterruptedException ie){}
ceva[i].setSelected(false);
try{Thread.sleep(1000);}catch(InterruptedException ie){}
i++;
}
1秒= 1000ミリ秒
これを使って:
public static void wait(int ms){
try
{
Thread.sleep(ms);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
次に、次のようにこのメソッドを呼び出すことができます。
wait(1000);
TimeUnit.SECONDS.sleep(1);
またはThread.sleep(1000);
を使用するのは許容できる方法です。どちらの場合も、コードをBulkyにするInterruptedException
name__をキャッチする必要があります。MgntUtilsと呼ばれるオープンソースのJavaライブラリがあります。これは、内部ですでにInterruptedException
name__を処理するユーティリティを提供します。そのため、コードには1行だけが含まれます。
TimeUtils.sleepFor(1, TimeUnit.SECONDS);
Javadoc here を参照してください。 Maven Central または Github からライブラリにアクセスできます。図書館について説明している記事が見つかりました ここ