编写一个动画播放程序,在JFrame中运行。配置2个按钮,一个按正序播放,一个按反序视频播放。import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class GUI_Player_Again
{
public static void main(String[] args)
{
new MyJFrame();
}
}class MyJFrame extends JFrame implements ActionListener
{
JButton jb1,jb2;
Timer timer;
Image[] Image1,Image2,Image3;
MyJpanel myJpanel;
int number = 0;

MyJFrame()
{
super("动画");
jb1 = new JButton("正序播放");
jb2 = new JButton("反序播放"); Image1 = new Image[10];
for(int n = 1; n <= 10; n++)
{
Image1[n-1] = Toolkit.getDefaultToolkit().getImage("images/T"+n+".gif");
}
Image2 = new Image[10];
for(int n = 0; n<10; n++)
{
Image2[n] = Image1[9-n];
}
Image3 = new Image[10]; jb1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e1)
{
Image3 = Image1;
}
});
jb2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e2)
{
Image3 = Image2;
}
}); timer = new Timer(10,this);//new timeractioner()
myJpanel = new MyJpanel();
        timer.setInitialDelay(0);
        timer.setCoalesce(true); add(jb1,"West");
add(jb2,"East");
getContentPane().add(myJpanel,"Center");
pack();
setVisible(true);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
setVisible(false);
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
number++;
myJpanel.MyJpaneling(Image3,number);
myJpanel.repaint();
}
}class MyJpanel extends JPanel
{

int number ; 
Image[] Image3;
void MyJpaneling(Image[] Image3,int number)
{
this.Image3 = Image3;
this.number = number;
}
public void paint(Graphics g)//paintComponent
{
super.paintComponent(g);
g.drawImage(Image3[number%10],0, 0, this);
}
}
可是编译通过,可是不能显示图片
cmd 中出现一大串的提示

解决方案 »

  1.   


    if(Image3 != null){
    g.drawImage(Image3[number % 10], 0, 0, this);
    }
      

  2.   

    出异常了。NullPointerException.
    恕我直言,你这代码,几乎没法改,若要修改,不如完全重构的好,也更快。因为思路就有问题,什么时候做什么,点那个按钮做什么?怎么做,自己好好规划一下。swing这部分,需要对于每个部分执行顺序有一定的了解才能够熟练应用,你不会在用记事本写这些代码吧?如果真的是这样,倒是值得佩服,和当年的我一样。给你一些提示吧:
    首先是paint方法,什么时候调用?这个方法可以说调用的非常频繁。
    g.drawImage(Image3[number % 10], 0, 0, this);你却这样,你一定要在这之前调用你的MyJpaneling方法。这个如何保证的了?该做什么,扮演什么角色,应该知道哪些事情?
    第二,布局问题。pack这个方法有些时候是不错,可不是什么时候都好用。
    第三,还是规划,panel每次的绘制,为什么还需要与外面通信?直接封装就可以了,如果没有中断,会一直执行下去。你这样做,可以说严重违反了MVC模式原则。做自己应该做的,多一点都不要做。罢了,先说这些,慢慢学习吧,顺便说一句,再看看编码规范。