【发布时间】:2017-03-22 09:06:27
【问题描述】:
我正在尝试通过将所有帧显示为BufferedImage 对象并使用Thread 在JPanels paintComponent(Graphics g) 方法中为每个帧调用g.drawImage 来在JPanel 中绘制动画,中间有睡觉。我的理解是从任何地方调用g.drawImage,只要g是paintComponent中的Graphics对象,应该会导致JPanel中的像素被更新,但@没有变化987654332@。这不是Graphics.drawImage 的工作方式,还是使用另一个Thread 或其他所有东西的问题?下面是我的代码的缩写版本,删除了不必要的部分
class Example extends JPanel{
public Dimension getPreferredSize(){
return new Dimension(500, 500);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
draw(g);
}
public void draw(Graphics g){
BufferedImage temp1;
BufferedImage temp2;
try{
temp1 = ImageIO.read(new File("C:\\Users\\Owner\\Desktop\\test1.png"));
temp2 = ImageIO.read(new File("C:\\Users\\Owner\\Desktop\\test2.png"));
}catch(IOException e){
temp1 = null;
temp2 = null;
}
final BufferedImage image1 = temp1;
final BufferedImage image2 = temp2;
Thread drawThread = new Thread(new Runnable(){
public void run(){
g.drawImage(image1, 0, 0, null);
try{
Thread.sleep(100);
}catch(InterruptedException e){
// omitted
}
g.drawImage(image2, 0, 0, null);
try{
Thread.sleep(100);
}catch(InterruptedException e){
// omitted
}
}
});
drawThread.start();
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new B());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
【问题讨论】:
标签: java multithreading image swing graphics