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++));
}
}
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作为一个静态对象调用了repaint两次 但一旦主线程到这句改变boardpanel指向 boardpanel便不再是Test类里的静态成员变量了 它调用的repaint()方法就不再是你所想看的的那个System.out.println("paint "+(i++));了