0

曲を再生し、その間に画像を表示するJPanelを持つプログラムを書いています。曲は正常に再生され、最初の画像が描画されます (paintComponent への最初の呼び出しからだと思います) が、どういうわけか repaint() が呼び出されていないようです。私は本当に余分な目を使うことができました。画像を表示する JPanel クラスのコードを以下に示します。本当にありがとう!

class pictures extends JPanel implements Runnable {
private ImageIcon images[];
private Thread imagerunner;
private int currentImage;

pictures() {
    super();
    imagerunner = new Thread(this);
    images = new ImageIcon[6];
    imagerunner = new Thread(this);
    images[0] = new ImageIcon("pic1.jpg");
    images[1] = new ImageIcon("pic2.jpg");
    images[2] = new ImageIcon("pic3.jpg");
    images[3] = new ImageIcon("pic4.jpg");
    images[4] = new ImageIcon("pic5.jpg");
    images[5] = new ImageIcon("pic6.jpg");
    currentImage = 0;
}

public void run() {
    int i = 0;
    System.out.println("starting pics");
    while( i < 100 ) {
        System.out.println("about to repaint()");
        this.repaint();
        System.out.println( "image: " + currentImage );
        waiting( 2000 );
        currentImage++;
    }
    System.out.println("done");
}

public void paintComponent( Graphics g ) {
    super.paintComponent( g );
    System.out.println("repainting");
    images[ currentImage ].paintIcon(this,g,0,0);
}

public static void waiting (int n) {
    long t0, t1;
    t0 =  System.currentTimeMillis();
    do{
        t1 = System.currentTimeMillis();
    }
    while (t1 - t0 < n);
}
}
4

3 に答える 3

0
  1. スレッドを開始することはありませんimagerunner
  2. 2回割り当てられます(理由はありません)。
  3. 別のスレッドからGUIを変更することはできません。そのためにSwingユーティリティを使用してください。
于 2011-05-06T05:37:14.367 に答える
0

このwaiting()方法はEDTをブロックしているようです。Swingを使用しTimerて更新をスケジュールすることをお勧めします。

于 2011-05-06T05:38:00.083 に答える
0

次のことを行う必要があります。

1) 実際に実行するインスタンスを作成します。2) ディスプレイを再描画するには、repaint() を定期的に呼び出す必要があります。

それが役に立てば幸い。乾杯!

于 2011-05-06T05:49:43.753 に答える