Извините за такой простой вопрос, но я тут схожу с ума ..

Вот мой код :

 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);
 }
    }
 }

Этот метод, который я использовал для отрисовки нескольких изображений в апплет, вызвал исключение 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.
    }



}

ОБНОВИТЬ Я отладил свой файл, он возвращает, что мой img[] равен нулю, потому что я использовал кнопку для вызова JFileChooser, а затем вызвал свой метод loadimg(). поэтому, прежде чем я выберу файл, он вернет ошибку NullPointerException, но когда я выбрал файл, он все равно вернет исключение NullPointerException .. что мне делать? Благодарность :)

ОБНОВЛЕНИЕ ЗАКРЫТО, извините за ошибки новичка, я забыл указать размер массива в начале: p

-1
Fakhruzzaman 27 Мар 2014 в 16:40
Мне нужно увидеть остальную часть вашего кода, что вы делаете?
 – 
James Parsons
27 Мар 2014 в 16:42
Как вы получаете img?
 – 
nikis
27 Мар 2014 в 16:43
Установите точку останова на "g.drawImage(img[i], x, y,200,200, null);" запустите и проверьте, является ли g нулевым или img нулевым; затем проверьте img[1]..img[12], если они равны нулю
 – 
Dmitry Bychenko
27 Мар 2014 в 16:45
Куда вы что-то положили в img[]?
 – 
Klemens Morbe
27 Мар 2014 в 16:46
Есть ли причина, по которой int i, x и y сделаны так, как у вас, почему бы и нет for(int i = 1; i < 12; i++){ . Это бы немного упорядочило код. Следующее, что null, предполагает именно то, что что-то равно null, у вас есть инициализированный массив img? также, почему у вас есть 3 цикла for? если вы создаете 2d-карту (координаты x и y), чего вы надеетесь достичь с помощью 3 циклов for?
 – 
tommy knocker
27 Мар 2014 в 16:52

3 ответа

Лучший ответ

Вам необходимо инициализировать свой массив BufferedImage!

Итак, вместо этого:

private BufferedImage img[];

Попробуйте это (если у вас есть только эти 11 изображений):

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

Это должно решить проблему NullPointerException.

0
bobbel 27 Мар 2014 в 17:42
  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
tommy knocker 27 Мар 2014 в 16:55

Вам следует выполнить отладку, если ваш параметр g передан правильно, а также если ваш индекс i не выходит за пределы допустимого диапазона.

0
cbg 27 Мар 2014 в 16:45