日期:2014-05-20  浏览次数:20751 次

为什么repaint没有调用paint或update?
[code=Java][/code]import java.awt.*;
import javax.swing.*;

public class Test implements Runnable{
private static BoardPanel boardPanel = new BoardPanel(); 
Test(){
new Thread(this).start();
}
@Override
public void run(){
int i = 1;
while(true){
try{
Thread.sleep(30);
}
catch(InterruptedException e){
}
boardPanel.repaint();
System.out.println("Thread run "+(i++));
}
}
public static void main(String[] args){
new Test();
BoardPanel boardPanel = new BoardPanel(); 
JFrame frame = new JFrame();
frame.add(boardPanel,BorderLayout.CENTER);
frame.setSize(475,494);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class BoardPanel extends JPanel{
@Override
public void update(Graphics g){
paint(g);
}
int i = 1;
@Override
public void paint(Graphics g){
System.out.println("paint "+(i++));
}
}

------解决方案--------------------
上边的解释有问题 应该是改变指向后boardPanel作为主线程的资源一直被占用了 所以另一个线程中才无法调用 大概应该是这个样子