原代码如下:/**
   @version 1.30 2000-06-02
   @author Cay Horstmann
*/import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;public class LabelImage
{
   public static void main(String[] args)
   {
      ImageFrame frame = new ImageFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.show();
   }
}/**
    A frame with an image panel1
*/
class ImageFrame extends JFrame//一个最简单的Frame只需以下语句
{
   public ImageFrame()
  {  //得到图片的长和宽并传递给Frame的长和宽。    int HEIGHT= 400;
       int WIDTH  =400;
       setTitle("ImageTest");
       setSize(WIDTH, HEIGHT);
             // add panel to frame      ImagePanel panel = new ImagePanel();
      Container contentPane = getContentPane();
      contentPane.add(panel);}
}
/**
   A panel that displays a tiled image
*/
class ImagePanel extends JPanel
{
   public ImagePanel()//为了得到图片而增加的方法
   {
      image =new ImageIcon(n) ;
      label.setIcon(image);
      this.add(label);
      setLayout(new BorderLayout());
      JPanel panel = new JPanel();      JButton nextButton = new JButton("NEXT");
      panel.add(nextButton);
      nextButton.addActionListener(new NextAction());      JButton preButton = new JButton("Preview");
      panel.add(preButton);
      preButton.addActionListener(new PreAction());
      
      this.add(panel,BorderLayout.SOUTH);   }   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);      
          }
  private class NextAction implements ActionListener{
//让文件名加1
public void actionPerformed(ActionEvent e) {
    if(i==7)
    {JOptionPane.showMessageDialog(null,new String ("没有了,只有这3张!"));
    
    return;
}
i=i+1;
System.out.println(n);
n=((String)(i+".jpg"));
label.setIcon(image);
repaint();
System.out.println(n);
}
}
private class PreAction implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(i==5){
JOptionPane.showMessageDialog(ImagePanel.this,new String("Only 3 pic"));
return;
}
i=i-1;
System.out.println(n);
n=((String)(i+".jpg"));
label.setIcon(image);
repaint();
System.out.println(n);
}}
   public String n="5.jpg";//代表加载的那个jpg文件.
   private ImageIcon image;
   private JLabel label;
   private int i=5;}

解决方案 »

  1.   

    空指针错误。一个class你没有初始化就对它进行操作,就会抛这个NoPointerException。把你的代码贴出来看看。
      

  2.   

    已经贴出来了。是哪个class没有初始化呢?
      

  3.   

    哦,
    知道了,是label没有初始化谢谢各位
      

  4.   

    5.jpg、6.jpg和7.jpg这三个图像文件与这几个.class文件是在同一个目录下吗?
    你还是写上绝对路径吧
      

  5.   

    Label的Icon设定过后是不是不能改变的??
      

  6.   

    为什么构造ImageIcon的n值改变了,也就改变了image;
    但是却不能改变label呢?各位发发言啊。
    晚上11点结帐!
      

  7.   

    注意你的:ImagePanel panel = new ImagePanel();
      

  8.   

    不好意思,刚才不小心毃了enter。
    接上文:
      和 public ImagePanel()//为了得到图片而增加的方法
       {
          image =new ImageIcon(n) ;   }
    你在
      

  9.   

    接上:你在ImagePanel的构造器中new了Image,构造器方法中的调用只在new时才调用,所以你只创建一个Image,要想变化,可以把image =new ImageIcon(n) ;放到public void actionPerformed(ActionEvent e) {
    }方法体中。public void actionPerformed(ActionEvent e) {
    if(i==5){
    JOptionPane.showMessageDialog(ImagePanel.this,new String("Only 3 pic"));
    return;
    }
    i=i-1;
    System.out.println(n);
    n=((String)(i+".jpg"));
             image =new ImageIcon(n) ;
             label.setIcon(image);
    repaint();
    System.out.println(n);
    }