2013-03-03 5 views
1

Так вот часть моего кода тот бросает NullPointerException:Получение NullPointerException при создании GImage

public class PuzzleGame extends GraphicsProgram implements KeyListener{ 
     private ArrayList <PuzzleImage> list = new ArrayList <PuzzleImage>(); 
     private PuzzleImage _11=null; 

    public static void main(String[] args) { 
      PuzzleGame game= new PuzzleGame(); 
      game.setup(); //NullPointerException here 
      game.addKeyListener(game); 
     } 

    private void setup(){ 
      BufferedImage img11 = null; 
      try { 
       img11 = ImageIO.read(new File("C://part11.png")); 
      } catch (IOException e) { 
      } 
      PuzzleImage _11=new PuzzleImage(img11,2,2,2,2); //NullPointerException here 
      list.add(_11); 
    } 
} 

А вот класс PuzzleImage

public class PuzzleImage extends GImage { 
    public PuzzleImage(Image img, double x1, double y1, double realX, double realY) { 
     super(img, x1, y1); //NullPointerException here 
     x=x1; 
     y=y1; 
    } 
    private double x; 
    private double y; 
    private double realX; 
    private double realY; 
} 

Так что я сделал, что есть файл с именем part11.png на C, поэтому я предполагаю, что путь должен быть правильным. Теперь я честно понятия не имею, что не так с этим кодом, однако я очень новичок в java, поэтому, скорее всего, есть что-то, чего я не знаю или не видел. Может быть, некоторые из вас, ребята, могли бы посмотреть и посмотреть, сможете ли вы что-нибудь найти? Благодарю.

SOLVED: Оказывается, что из 12 изображений я добавляю, что этот был только .jpg, а не .png. Наверное, уже поздно, мне жаль беспокоить вас, ребята.

ответ

1

вполне вероятно, что img11 в setup() является null, потому что у вас есть блок catch try, окружающий его назначение. Если ваш код получает IOException, ваш код не будет разбит, но ни один из img11 не получит какое-либо значение и продолжит оставаться нулевым.

Попробуйте распечатать сообщение об ошибке, чтобы убедиться, что вы получаете исключение IO.

Так изменить код, чтобы что-то вроде этого ...

private void setup(){ 
      BufferedImage img11 = null; 
      try { 
       img11 = ImageIO.read(new File("C://part11.png")); 
      } catch (IOException e) { 
       e.printStackTrace() //ADD THIS LINE 
      } 
      PuzzleImage _11=new PuzzleImage(img11,2,2,2,2); //NullPointerException here 
      list.add(_11); 
    } 

Если вы видите сообщение об ошибке печатается вы будете знать, что этот вопрос, скорее всего, с img11.

Плюс, я предполагаю, что вы используете метод ImageIO.read (FIle) из этого следующего JDK API http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html#read(java.io.File), в котором четко говорится, что ошибка будет брошен, если вход нулевой ...

чтения

общественности статической BufferedImage чтения (вход файла) бросает IOException

Параметры: вход - с F ile читать. Возвращает: BufferedImage , содержащий декодированное содержимое ввода или значение null.

Throws: IllegalArgumentException - если ввод равен нулю. IOException - если возникает ошибка во время чтения.

+0

Да, это то, о чем я тоже думаю, я имею в виду, что это не может быть правдой? Также я добавляю путь правильно? Я просто не был уверен в этих вещах. EDIT: да, я подтвердил, что это действительно проблема, она бросает исключение, но может ли выяснить причину? –

+0

Нет, я не думаю, что это что-то еще. это также помогло бы, если бы вы могли опубликовать спецификацию API для 'ImageIO.read (File)'. что может помочь подтвердить вещи. – vijay

+1

@AndrewThompson +1 за предложение. Я обновил свое решение, чтобы отразить то же самое. – vijay

0

PuzzleImage _11 = new PuzzleImage (img11,2,2,2,2);

Просто попробуйте так:

_11 = новый PuzzleImage (img11,2,2,2,2);

Как правило, NullPointerException вызывается только на этом типе.

+0

Спасибо за ваше предложение, однако он все еще не работает, проблема заключается в том, что он не устанавливает img11 ни в чем, так как попытка выдает исключение. –

Смежные вопросы