Swing/TimerAction のバックアップの現在との差分(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/TimerAction へ行く。
- 1 (2014-04-14 (月) 00:48:39)
- 2 (2014-04-14 (月) 17:43:42)
- 3 (2014-04-14 (月) 19:15:19)
- 4 (2014-05-02 (金) 12:49:54)
- 5 (2014-10-26 (日) 04:11:46)
- 6 (2014-11-01 (土) 00:46:09)
- 7 (2015-11-15 (日) 19:30:21)
- 8 (2017-04-07 (金) 13:51:51)
- 9 (2017-05-16 (火) 14:33:53)
- 10 (2018-05-09 (水) 15:49:55)
- 11 (2020-05-03 (日) 14:11:51)
- 12 (2021-10-30 (土) 21:38:16)
- 13 (2022-08-20 (土) 22:15:25)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: TimerAction title: Timerの使用数を変更 tags: [Timer, Animation] author: aterai pubdate: 2014-04-14T00:48:39+09:00 description: パネルのタイルアニメーションで使用するjava.swing.Timerの数を変更して動作のテストを行います。 image: https://lh6.googleusercontent.com/-Kc02XwN3fHA/U0qu1BcXNEI/AAAAAAAACDg/UDwGuPoJmjk/s800/TimerAction.png --- * 概要 [#sc2aa067] * 概要 [#summary] パネルのタイルアニメーションで使用する`java.swing.Timer`の数を変更して動作のテストを行います。 #download(https://lh6.googleusercontent.com/-Kc02XwN3fHA/U0qu1BcXNEI/AAAAAAAACDg/UDwGuPoJmjk/s800/TimerAction.png) * サンプルコード [#xd44e1f4] * サンプルコード [#sourcecode] #code(link){{ //Timer: 1, ActionListener: 100 // Timer: 1, ActionListener: 100 class Tile2 extends JComponent { private int red; public Tile2(final Random rnd, Timer timer) { super(); timer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { red = rnd.nextInt(255); repaint(); } }); } @Override public Dimension getPreferredSize() { return new Dimension(10, 10); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(new Color(red, 255 - red, 0)); g.fillRect(0, 0, getWidth(), getHeight()); } } }} * 解説 [#ffd4e6ea] * 解説 [#explanation] - `Timer: 100` -- `10x10`個のアニメーション用タイル一つに、`Timer`を生成して使用(その為、`Timer`も`10x10`個存在する) -- `JDK 1.7.0_40`以降で低速 -- `JDK 1.8.0`以降は、`JDK 1.7.0_25`と同等 -- `10x10`個のアニメーション用タイル(`JComponent`)一つにそれぞれ`Timer`を生成して使用(その為`Timer`も`10x10`個存在する) -- %%`JDK 1.7.0_40`以降で低速%% すでに修正済みで上記のサンプルは他と差がない -- `JDK 1.8.0`以降は`JDK 1.7.0_25`と同等 - `Timer: 1, ActionListener: 100` -- `Timer`は`1`個、`Timer#addActionListener(...)`で、`100`個の`ActionListener`を追加して使用 -- `Timer`は`1`個だけ用意しこれに`Timer#addActionListener(...)`メソッドで`100`個の`ActionListener`を追加して使用 - `Timer: 1, ActionListener: 1` -- `1`個の`Timer`を使用し、`for`ループで`10x10`のラベルの色を変更してアニメーションを実行 -- `1`個の`Timer`を使用し`for`ループで`10x10`のラベルの色を変更してアニメーションを実行 * 参考リンク [#xd75a5c0] - [http://stackoverflow.com/questions/18933986/javax-swing-timer-slowdown-in-java7u40 java - javax.swing.Timer slowdown in Java7u40 - Stack Overflow] * 参考リンク [#reference] - [https://stackoverflow.com/questions/18933986/javax-swing-timer-slowdown-in-java7u40 java - javax.swing.Timer slowdown in Java7u40 - Stack Overflow] -- `JDK 1.7.0_25`までは、どれも同じような速度でアニメーションするが、`JDK 1.7.0_40`以降は`Timer`の数を減らさないと遅くなる(`JDK 1.8.0`は`JDK 1.7.0_25`と同等に速い) -- [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7167780 Bug ID: JDK-7167780 Hang javasoft.sqe.tests.api.javax.swing.Timer.Ctor2Tests]の修正が影響している? -- [https://bugs.openjdk.org/browse/JDK-7167780 JDK-7167780 Hang javasoft.sqe.tests.api.javax.swing.Timer.Ctor2Tests - Java Bug System]の修正が影響していた? * コメント [#t096266b] * コメント [#comment] #comment #comment