我for for循环的Graphics g返回一个NullPointerException

时间:2014-03-27 12:40:32

标签: java

对不起这个基本问题,但我在这里失去了理智......

这是我的代码

 public void paint(Graphics g) {

    for(int i=0;i<11;i++){
        for(int x=0;x<2100;x+=210){
            for(int y=0;y<2100;y+=210){
   g.drawImage(img[i], x, y,200,200, null);
            }
  // g.drawImage(img2, WIDTH, WIDTH, jc);
 }
    }
 }

我用来将多个图像绘制到applet的方法导致了NullPointerException

有谁知道为什么?

提前致谢 :)

我的形象

 public void loadimg(File fn){

         try{

            // File fn =  jc.getSelectedFile();
             for(int i=0;i<11;i++){
              img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
               repaint();
             }

         }
         catch(Exception e){
             e.printStackTrace();
         }

     }

我的代码有问题吗?它还没有完成,但是子图像应该分开分割图像..谢谢

抱歉我的英语不好。

顺便说一句,这是我的完整代码

package afisapplet;
import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
//import java.net.URL;
import javax.imageio.*;
import java.awt.event.*;
import javax.swing.JFileChooser;
import afisapplet.Afisapplet;


public class displayaplet extends Applet implements ActionListener {
JFileChooser jc = new JFileChooser();
     private BufferedImage img[];
     //private BufferedImage img2;
     Button b = new Button("Scan");
      Button c = new Button("View");
     // Button d = new Button("Select Image"); 
static Afisapplet afap ;
     public void init() {


      b.addActionListener(this);
      c.addActionListener(this);
      add(b);
      add(c);

     }


     public void paint(Graphics g) {

        for(int i=0;i<11;i++){
            for(int x=0;x<2100;x+=210){
                for(int y=0;y<2100;y+=210){
       g.drawImage(img[i], x, y,200,200, null);
                }
      // g.drawImage(img2, WIDTH, WIDTH, jc);
     }
        }
     }

     public void scan(){
         try{
          afap = new Afisapplet();   
         }
         catch(Exception e){
             e.printStackTrace();
         }
     }
         public void loadimg(File fn){

             try{

                // File fn =  jc.getSelectedFile();
                 for(int i=0;i<11;i++){
                  img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
                    repaint();
                 }

             }
             catch(Exception e){
                 e.printStackTrace();
             }

         }

    @Override
    public void actionPerformed(ActionEvent ae) {
        Button source= (Button) ae.getSource();
if(source.getLabel() == "Scan"){
scan();
}
      if(source.getLabel() == "View"){
           int returnVal=     jc.showOpenDialog(c);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File fn = jc.getSelectedFile();
                loadimg(fn);


            } else {
                return;
            }



      }      

//To change body of generated methods, choose Tools | Templates.
    }



}

UPDATE 我已经调试了我的文件,它返回我的img[]为空,因为我使用了一个按钮来调用JFileChooser,然后调用我的loadimg()方法。因此,在我选择一个文件之前它会返回一个NullPointerException错误,但是当我选择了一个文件时,它仍然会返回一个NullPointerException ..我该怎么办? 谢谢:)

更新已关闭 对不起我的noob错误,我忘了在开头声明数组大小:p

3 个答案:

答案 0 :(得分:1)

  for(int i=0;i<11;i++){
              img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
               repaint();
             }

您正在填充0到11之间的图像数组

   for(i=1;i<12;i++){
        for(x=1;x<2100;x+=210){
            for(y=1;y<2100;y+=210){
   g.drawImage(img[i], x, y,200,200, null);
            }

您正在循环遍历图像0到12的数组

答案 1 :(得分:0)

如果参数g正确传递,并且索引i未超出范围,则应调试。

答案 2 :(得分:0)

您必须初始化BufferedImage数组!

所以不要这样:

private BufferedImage img[];

试试这个(如果你只有这11张图片):

private BufferedImage img[] = new BufferedImage[11];

这应解决NullPointerException问题。