2

私は AWT/Swing プログラミングが初めてです。100,000回画像を描画しようとします。methodのループdrawImage()は in paint()method です。Java がメソッドを呼び出す回数paint()は非常に不安定です。paint()プログラムの 1 回の実行中にメソッドを 2 回呼び出すこともあれば、3 回呼び出すこともあります。を行うボタンを作成すると、このボタンをクリックするたびに 1 回repaint()だけ呼び出されます。paint()

paint()メソッドがいつ呼び出されるか教えてもらえますか? システム トリガー ペインティングとアプリ トリガー ペインティングを知っています。しかし、私はそれがこれらのケースのいずれにも属していないと思います.

4

1 に答える 1

0

別のスレッドを使用してrepaint()メソッドを呼び出すことができます。これを行う簡単な方法は、ペイント クラス (java.awt.Canvas またはここでは javax.swing.JPanel) に Runnable を実装し、コンストラクターでその Thread を開始することです。run()メソッドも追加します。

import javax.swing.*;

public class DrawPicktures extends JPanel implements Runnable
{
    public DrawPickture()
    {
        /* Code */
        new Thread(this).start();
    }

    public void Paint(Graphics g)
    {
        super.Paint(g); // Will draw all gui components added
        /* Code */
    }

    public void run()
    {
        while(true)
        {
            repaint();
            try
            {
                Thread.sleep(1000  /* Waits for 1000 milliseconds */);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

JPanel (またはキャンバス) は別のスレッドから再描画されるため、メイン スレッドがブロックされることはなく、プログラムは同時に他の処理を行うことができます。

于 2013-12-02T17:33:15.720 に答える