• ベストアンサー

無限ループをわざと作って時計をつくりたい

_ranco_の回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.4

> ちゃんとThread.sleep(n)を呼び出してやれば Thread.sleep()は、スレッドのスケジューリングを放棄しないから、厳しい条件ではだめですよ。javax.swing.Timerのソースコードを見ると、良い勉強になります。また、別スレッドからGUIのコードを呼ぶときは、やはり厳しい条件のときにはinvokeLater()やinvokeAndWait()をかませる必要があります。初心者も、そのことは知っておくべきです。

関連するQ&A

  • RTOSの無限ループ

    itron等のRTOSではタスク登録すれば while(1){ 処理; } という無限ループを抜けられるじゃないですか? いったいどういう仕組みで抜けているのでしょうか? ソフト的にはどうあがいても無限ループなわけで・・。 どなたか教えてください。

  • jspで無限ループ

    jspやサーブレット、或いはaspのプログラムの中で無限ループになった場合、例えば while(true){ ・ ・ ・ } のように。 そのプロセスはどうなるのでしょうか? ブラウザを閉じた瞬間に止まるのでしょうか?

    • ベストアンサー
    • Java
  •  Javaのループ中のメモリの動きについて

     Javaのループ中のメモリの動きについて  以下のソースはテキストフィールドに文字列を張り付けると、特定の文字を置き換えて、カットするものです。 アクションイベント内で、無限ループをして待ち受ける処理をしていますが、メモリーが使われすぎてパソコンに負担がかかるのではと思っています。     見た目では影響ないようですし、カタカタ音はなりません。  しかし念のため数値でこれを把握したいです。  どのような測定方法があるかご存じの方がおられましたら教えてください。  (また、根本的にプログラムがNGであれば、ご指摘いただきたいです) public class test_1 extends Frame implements ActionListener { public static void main(String[] args) { new test_1(); } JTextField a = new JTextField(); JLabel b = new JLabel("Ctl + C", JLabel.CENTER); JButton b1 = new JButton(); String name; ClosingListener c = new ClosingListener(); public test_1() throws HeadlessException { super(); this.setTitle("日時の/と:を取り除く"); this.setSize(400, 150); this.addWindowListener(c); a.setFont(new Font("", Font.BOLD, 30)); a.setFocusable(true); a.putClientProperty("caretAspectRatio", Float.valueOf(0.3F)); a.setForeground(Color.cyan); a.setBackground(Color.yellow); b.setBackground(Color.white); b.setFont(new Font("", Font.BOLD, 30)); b.setPreferredSize(new Dimension(150, 150)); b1.addActionListener(this); this.add(a, BorderLayout.CENTER); this.add(b, BorderLayout.WEST); this.setVisible(true); b1.doClick(); } class ClosingListener extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public void actionPerformed(ActionEvent e) { while (true) { if ((a.getText().length() == 15) == true) {//文字の置き換え name = a.getText(); name = name.replaceAll("/", "_"); name = name.replaceAll(":", "_"); // name.substring(0, 16); System.out.println("name==" + name); a.setText(name); a.requestFocusInWindow(); a.selectAll(); a.cut(); } else if (a.getText().equals("")) {//空文字はスルー } else {//15文字以外はエラー JOptionPane.showConfirmDialog(this, "日時は**文字です。", "確認", JOptionPane.DEFAULT_OPTION); a.requestFocusInWindow(); a.selectAll(); a.cut(); } } } }

    • ベストアンサー
    • Java
  • UWSC 無限ループ

    UWSCで A.uws と B.uwsを無限ループさせたくて // 無限ループ While True Call A.uws // xxxx.uws 記録保存したスクリプト名 Call B.uws // xxxx.uws 記録保存したスクリプト名 Wend と記述したのですが、A.uwsは読み込まれたのですがB.uwsが読み込まれません。 具体的に、どこがどうおかしいか、このスクリプトでは出来ない場合、実際に両方を無限ループさせたい場合どう記述すれば良いのか教えて下さい。

  • for文while文の無限ループの違いについて

    for文の無限ループ for(; ;) と、 while文の無限ループ while(1) は、 どのように違うのですか? 処理速度やCPU負荷を考慮して、 どちらを使用するか悩んでいます。 よろしくお願いします。

  • 無限ループからの脱出

    import java.io.*; public class Test { public static void main(String[] args) throws IOException { String ss; int idt; while(true) { try { BufferedReader f = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数字を入力してください : "); ss = f.readLine(); if(ss == "end") break; idt = Integer.parseInt(ss); System.out.println("あなたの入力した数字は " + idt + " です。"); System.out.println(); } catch(NumberFormatException e) { System.out.println("error : " + e); System.out.println(); } } } } 上記は、コンソールに入力した数字をそのまま出力し、数字以外を入力すると例外処理するプログラムです。 見ていただくと分かるとおり、途中入力したものが「end」だとbreakして無限ループを脱出するということを予定して作りました。 しかしbreakしてくれません。if文の中に処理が移っていないのです。なぜでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • javaの配列について。

    javaのプログラミングについてなのですが、配列を利用して、 画像イメージ zu0.jpg,zu1.jpg,zu2,jpgをウィンドウズアプリケーションで 3つ縦に並べて表示させ、ページ上部にタイトルを入れろという課題が出たのですが、 なかなかうまいきません。原因がわからないので質問させていただきます。 どうかお力添えお願いいたします。 ↓↓プログラム文↓↓ import java.awt.*; class PictF extends Frame{ Font f; Image im; PictF(){ setBackground(new Color(200,255,255)); f=new Font("Dialog",Font.ITALIC,36); Image[] im=new Image[3]; for(int i=0;i<im.length;i++) im[i]=Toolkit.getDefaultToolkit().getImage("zu"+i+".jpg"); setTitle("image"); setSize(400,700); } public void paint(Graphics g){ Image[] im=new Image[3]; for(int i=0;i<im.length;i++) g.drawImage(im[0],10,10,this); g.drawImage(im[1],10,100,this); g.drawImage(im[2],10,210,this); g.setFont(f); g.setColor(Color.blue); g.drawString("Ikeda Auditorium",100,240); } public static void main(String[] args){ PictF pf=new PictF(); pf.setVisible(true); } }

    • ベストアンサー
    • Java
  • 無限ループの防ぐ方法

    いつもお世話になっております、While文、for文などで 無限ループが発生した場合の良い対応方法を教えて教えて いただけないでしょうか? 最小限で且つ最速な変更が 一番助かります。 ------------------------------------------------------- 【例】 for(;;){ if(iNum == 10) break; } この場合だと、iNumが10になるまで抜けない為 無限ループになりPCがフリーズしてしまいます。 ------------------------------------------------------- 【対応】 【例】 for(;;){ if(iNum == 10) break; delay(1); } 一番簡単な対応だと、delay1を入れる事により PCのフリーズが防げると思います。ですが、delay1を入れる 事により処理が重くなってしまいます。 ------------------------------------------------------- そこで教えていただきたいのは、PCがフリーズさせない ような処理は他にないでしょうか? そのような関数が100ほどあるので、出来るだけ最小限な 改造で薦めたいと思っています。 以上です。

  • 無限ループについて(while true~)

    たびたびお世話になります。 管理しているサーバーとデータベースの接続確認を、30分に一度行っているのですが、この際に入力していたコマンドが無限ループから抜け出すことができなくなってしまいました。 入力していたコマンドは、while true; do ./aaa.sh ; sleep 1800; doneです。 30分に一度、aaa.shを起動させて接続を確認する、というつもりで入力していたものなのですが…。 無限ループに気付き、プロセスをrootからkill(-kill) しても復活(?)してしまうようです。 このままでは問題があるため、なんとか無限ループを抜け出したいのですが、いい方法はありませんでしょうか? OSはLinuxです。 申し訳ありませんが、初心者中の初心者のため、必要な情報があまりわかりません。不足がありましたら、補足要求お願いします。

  • 無限ループ中におけるマウスイベント処理について

    import java.awt.*; import java.awt.event.*; //他のインポートは省略。 public class Test extends Frame {  public static void main(String[] args) {   new Test();  }  public Test() {   //フレームの基本設定は省略。   enableEvents(AWTEvent.MOUSE_EVENT_MASK);   show();   mainLoop();  }  private void mainLoop() {   while(true) {    //処理は省略。   }  }  public void processMouseEvent(MouseEvent e) {   //処理は省略。  }  //他のメソッドは省略。 } こんな感じのプログラムを作ったのですが、mainLoop メソッドの無限ループにはまって何もできなくなるはずが、 なぜか普通にマウスイベント処理ができたので不思議に思っております。 VB などで同じようなプログラムを作るときは無限ループの最後に DoEvents でイベント処理をさせております。 言語仕様なのか自分の使ってる PC や OS など環境のせいなのが気になっております。 Java 言語に詳しい方、もし何かご存知でしたら教えて下さい。 (なお、省略した部分は普通の計算処理とかなので影響はないと思われます。)

    • ベストアンサー
    • Java