- ベストアンサー
Timerについて教えて下さい
ある処理を5秒おきに、n回だけ実行したいのですが、「n回」をどのように実現したらよいのかわかりません。Timerクラスのメソッドにはないようなのですが。。簡単なサンプルコードを書いてみましたので以下を元に修正方法を教えて頂けると助かります。 import java.util.Timer; import java.util.TimerTask; public class TimerTest { public static void main(String[] args) { int n=10; Timer timer = new Timer(); timer.schedule(new sendTask(), 5000, 5000); } } class sendTask extends TimerTask { public void run() { System.out.println("Hello World"); } }
- rio_grande
- お礼率77% (349/452)
- Java
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
回数制限のある TimerTask を作ればいいと思います。 試してませんが、例えばこんな感じ。 import java.util.*; public final class Main { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new LimitTimerTask(timer, 10), 5000, 5000); } } final class LimitTimerTask extends TimerTask { private final Timer timer; private final int procNum; private int count = 0; LimitTimerTask(Timer timer, int procNum) { this.timer = timer; this.procNum = procNum; } public void run() { System.out.println("Hello, world!"); synchronized (this) { if (++count == procNum) { this.cancel(); timer.cancel(); } } } }
その他の回答 (1)
- ProKaseifu
- ベストアンサー率51% (98/192)
用途的にTimerを使う必要性を感じないんですが、Timerじゃなきゃダメなんですか? public static void main(String[] args) { for ( int i = 0 ; i < 5 ; i ++){ System.out.println("count:" + i); try { Thread.sleep(5000); } catch (InterruptedException e) { catch block e.printStackTrace(); } } } これじゃだめ?
お礼
Thread.sleep()というのがあるのですね。タイマーというキーワードで調べたので、Timerで質問してしまいましたが、こちらのほうがシンプルに出来ますね。。勉強になりました。有り難うございました。
関連するQ&A
- 実行時引数をrun()メソッドに渡すには?
初めまして。宜しくお願いします。 Javaの初心者で現在勉強中で、一定時間ごとに命令を走らせるプログラムを作ろうとしており、様々なサイトや本を参考にした結果、Timerクラス、TimerTaskクラスを使うと良さそうという事がわかりました。 一定周期毎に標準出力するのみのプログラムなら出来たのですが、実行時引数を一定周期毎に標準出力するプログラム作成時に躓いてしまいました。 望む挙動: $ java test1 abcdef とターミナルに入力して、一定周期毎に、"abcdef"が表示し続ける挙動。 躓いている点: main()メソッドからrun()メソッドに実行時引数(この場合、String st = String new args[0];)を渡そうと試みてる点。 -----------------ソースコード--------------------- import java.util.Timer; import java.util.TimerTask; public class test1 { public static void main(String args[]) throws Exception{ String st = new String(args[0]); Timer timer = new Timer(); timer.schedule(new TestTimer(), 0, 1000); } /** * 指定間隔置きに呼ばれる処理 */ static class TestTimer extends TimerTask{ public void run(){ System.out.println(st); // System.out.println("Hello, World!"); } } } ---------------------------------------------- 宜しくお願いします。
- ベストアンサー
- Java
- Javaでタイマーの使い方
Javaでタイマーの使い方作り方がわかりません import javax.swing.Timerこれつかいます。 package Test1; import javax.swing.Timer; public class Test1 { Timer TM = new Timer(10, null); public static void main(String[] args) { } } よろしくお願いします。
- ベストアンサー
- Java
- 他ファイルで定義された自作例外の受け方
他ファイルで定義された自作例外の投げ方と受け方を 教えて下さい。 // ------ Class.java ---> import java.io.*; public class Class1 { static Class2 oClass2; public static void main (String[] args) { try { oClass2 = new Class2(); System.out.println("main"); oClass2.vfFunc(); } catch (MyException e) { System.out.println("catch MyException"); } catch (Exception e) { System.out.println("catch Exception"); } } } // <------ Class1.java --- // ------ Class2.java ---> import java.io.*; public class Class2 { public Class2() { System.out.println("Class2コンストラクタ"); } public void vfFunc() { System.out.println("Class2 vfFunc"); throw new MyException(); } public class MyException extends Exception { public MyException() { System.out.println("MyException"); } } } //<------ Class2.java ---
- ベストアンサー
- Java
- importが分からない
importが違うせいだと思いますが、コンパイルできるように直してください。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a { public static void main (String args[]) { Date d = calendar.getTime(); SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE); String s = f.format(d); System.out.println(s); } }
- 締切済み
- Java
- あれ?
すいません。 長い間、 疑問に思ってたことがあるんですけれども、 (1) import javax.swing.*; class Sample { public static void main (String args[]) { ........ Aメソッド() } } (2) import javax.swing.*; class Sample extends aiueo { public static void main (String args[]) { ........ Aメソッド() } } (3) class Sample extends aiueo { public static void main (String args[]) { ........ Aメソッド() } } の違いが、 考えれば考えるほどわからなくなってきました。 パッケージと継承の関係について、 どうやら理解できていないみたいです。 どなたか分かりやすく教えてください。 よろしくお願いします。 (注) Aメソッドはaiueoクラスのメソッドとし、 aiueoクラスはjavax.swingパッケージに入っているものとします。
- ベストアンサー
- Java
- 初歩的な質問ですみません。
はじめまして。Javaの初心者です。 初歩的なことで、どうしてもわからないことがあります。 以下のような場合、 *************************************** class Oya { void func() { System.out.println("Oya"); } } class Ko extends Oya { Ko() { this.func(); } } class Main { public static void main(String[] args) { new Ko(); } } *************************************** Koクラスが初期化を完了していないのにもかかわらず func()メソッドを呼びさせてしまう理由がわかりません。なぜなのでしょうか?どうか教えてください。
- ベストアンサー
- Java
- オーバーライドの必要性
まだまだJavaを勉強している途中なのですが、下記のサンプルコードでオーバーライド(メソッドをオーバーロードすることをオーバーライドというのでしょうか…!?)のの必要性がよく分からなくなってしまったので質問させて頂きました。 /* sample.java */ abstract class super_class{ void write(){} } class CLASS1 extends super_class{ void write(){ System.out.println("CLASS1"); } } class CLASS2 extends super_class{ void write(){ System.out.println("CLASS2"); } } class sample{ public static void main(String args[]){ super_class obj = new CLASS2(); obj.write(); obj = new CLASS1(); obj.write(); } } 以上のコードを実行した場合 CLASS2 CLASS1 と表示されるのは多少なりとも勉強して分かったつもりでした…。 しかし、あくまでサンプルであるために特に意味がないことでもオーバーライドの説明をしているのだろうという風に考えてしまったのですが、 結局は、 スーパークラスとサブクラスに同じシグネチャのメソッドがあった場合、各サブクラスのメソッドが実行される と言うことは、スーパークラスのwrite()メソッドは何をしているのでしょうか? 多様性はJavaでも大切なものであるとのことなので質問させて頂きました。 なるべくわかりやすく説明して頂きたいと思います。 どうかお答えをお願いします。
- ベストアンサー
- Java
- javaの質問です。
明日JavaのBronze試験を受けに行くのですが、全然わからずに困っています。 紫色のJavaプログラマBronzr[SE7]という本を使用しています。 本の模試の問題です。 37 Class Super{ static void method(){ System.out.println("Super"); } } Class Sub extends Super{ static void method(){ System.out.println("Sub"); } } Class Test { public static void main(String[] args){ Super obj = new Sub(); obj.method(); } } この問題はSuperが表示されるらしいのですが、理由がわかりません。 サブクラスをインスタンス化しているので、Subが表示されるというのなら理解できます。staticが関係あるのはなんとなくわかるのですが、、、、、、なぜSuperなのかがわかりません。 解答ではスーパークラスの型にサブクラスを入れているからと簡単に書いてあります。 詳しく説明していただけると助かります。
- ベストアンサー
- Java
- java 入力命令
以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }
- 締切済み
- Java
お礼
問題なく実行で来ました。なるほどこうやってやればいいんですね。。 勉強になりました。ありがとうございます。