2014-11-01 7 views
0

Я читал около полутора часов, и по какой-то причине я получаю эту ошибку. Полная ошибка:Исключение из потока "main" java.lang.NullPointerException с массивами?

"Exception in thread "main" java.lang.NullPointerException 
    at HauntedHouse.livingRoomPath(HauntedHouse.java:98) 
    at TestHauntedHouse.main(TestHauntedHouse.java:8) 
Java Result: 1" 

После запуска методов из моего основного класса в классе тестирования.

Я создаю игру в лабиринте дома с привидениями, и вы выбираете, к какой комнате идти, и к каким объектам нужно взаимодействовать, если вы взаимодействуете с объектом, игра заканчивается. Код ниже, я предполагаю, что я делаю ошибку где-то в инструкции if, которая включает в себя сундук, потому что каждый другой путь работает, включая путь к ванной, и выбор объектов там. Это просто путь в гостиной, который, похоже, не работает, когда вы выбираете объект сундука, но я не уверен, что такое ошибка, я не получаю никаких красных отметок ошибки в моем основном классе.

import javax.swing.JOptionPane; 
import javax.swing.ImageIcon; 

public class HauntedHouse { 

    final ImageIcon map1 = new ImageIcon("C:\\Users\\Damian\\Pictures\\Designs\\Halloween Contest Card.jpg"); 
    private String playerName, option1, option2, option3, option4, option5; 
    private int result1; 

    public void askName() 
    { 
     playerName = JOptionPane.showInputDialog(null, "Welcome to Damian's Spooky Haunted House of  Harrowing. Please enter your name below to enter if you dare...", 
        "Welcoe to the Haunted House", JOptionPane.INFORMATION_MESSAGE); 
    } 

    public void showMap() 
    { 
     JOptionPane.showMessageDialog(null, "Are you ready to enter " + playerName + "? If not too bad, because here's where you start.", 
            "Your Map", JOptionPane.INFORMATION_MESSAGE); 
     JOptionPane.showMessageDialog(null, "The red dot is you.", 
            "Your Map", JOptionPane.INFORMATION_MESSAGE, map1); 
    } 

    public void livingRoomPath() 
    { 
     if (result1 == JOptionPane.YES_OPTION) 
     { 
     String [] options1 = {"Living Room", "Dinning Room", "Upstairs"}; 

     int choice1 = JOptionPane.showOptionDialog(
         null, 
         "Where would you like to move to next?", 
         "Option", 
         JOptionPane.YES_NO_CANCEL_OPTION, 
         JOptionPane.QUESTION_MESSAGE, 
         null, 
         options1, 
         options1[2]); 

      option1 = options1[choice1]; 
     } 

     if(option1.equals("Living Room")) 
     { 
      String [] options2 = {"Interact with an object", "Continue to Another Room"}; 

      int choice2 = JOptionPane.showOptionDialog(
         null, 
         "Welcome to the Living Room. The Master lives here. What would you like to do next?", 
         "Option", 
         JOptionPane.YES_NO_CANCEL_OPTION, 
         JOptionPane.QUESTION_MESSAGE, 
         null, 
         options2, 
         options2[1]); 

      option2 = options2[choice2]; 

      if(option2.equals("Interact with an object")) 
      { 
       String [] options3 = {"Chest"}; 

       int choice3 = JOptionPane.showOptionDialog(
          null, 
          "Which object would you like to interact with?", 
          "Option", 
          JOptionPane.YES_NO_CANCEL_OPTION, 
          JOptionPane.QUESTION_MESSAGE, 
          null, 
          options3, 
          options3[0]); 

          option3 = options3[choice3]; 

       JOptionPane.showMessageDialog(null, "Ghost escapes and scares you to death.", 
              "Game Over", JOptionPane.INFORMATION_MESSAGE); 
       JOptionPane.showMessageDialog(null, "You've been scared. Thanks for playing!", 
              "Game Over", JOptionPane.INFORMATION_MESSAGE); 
      } 

      else if(option2.equals("Continue to Another Room")) 
      { 
       String [] options4 = { "Bathroom",}; 

       int choice4 = JOptionPane.showOptionDialog(
          null, 
          "Where would you like to move to next?", 
          "Option", 
          JOptionPane.YES_NO_CANCEL_OPTION, 
          JOptionPane.QUESTION_MESSAGE, 
          null, 
          options4, 
          options4[0]); 

       option4 = options4[choice4]; 
      } 

      if(option4.equals("Bathroom")) 
      { 
       String [] options5 = { "Shower", "Mirror"}; 

       int choice5 = JOptionPane.showOptionDialog(
          null, 
          "Which object would you like to interact with?", 
          "Option", 
          JOptionPane.YES_NO_CANCEL_OPTION, 
          JOptionPane.QUESTION_MESSAGE, 
          null, 
          options5, 
          options5[1]); 

       option5 = options5[choice5]; 
      } 

      if(option5.equals("Shower")) 
      { 
       JOptionPane.showMessageDialog(null, "Room suddenly steams up and you feel fingers touching the back of your neck", 
              "Game Over", JOptionPane.INFORMATION_MESSAGE); 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null, "See a bloody face looking back at you.", 
              "Game Over", JOptionPane.INFORMATION_MESSAGE); 
      } 
       JOptionPane.showMessageDialog(null, "You've been scared. Thanks for playing!", 
              "Game Over", JOptionPane.INFORMATION_MESSAGE); 

     } 
    } 
} 
+2

Возможный дубликат [Что такое Исключение Null Pointer и как его исправить?] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

+0

Не уверен, что это дубликат, я просмотрел некоторые из них другие вопросы, связанные с этим, но это странно, потому что у меня есть несколько вещей в моем коде, которые повторяются, и все они работают, а затем только одна часть кода не работает. – beginnercoder010812

+0

Это нормально - 'String [] options4 = {" Bathroom ",};' дополнительная запятая? – Leron

ответ

0

Похоже, что это связано с тем, что вы на самом деле не инициализирует струнный ОПЦИЯ4, вы объявили его, а затем, если пользователь нажал ванной или что-то вы инициализирован его ОПЦИЯ4 = options4 [choice4] , А затем в другом случае вы спрашиваете, есть ли option4.equals (что-то), но (я предполагаю), поскольку вы инициализировали его внутри блока if, когда вы вызываете метод «equals», вы ссылаетесь на нулевую переменную. Возможным решением было бы инициализировать каждую переменную optionx с помощью «», чтобы они не были нулевыми, когда вы вызываете из них метод

+0

Спасибо. Кажется, это исправить, когда я установил их равными «» в начале кода. Мне пришлось изменить код в конце, хотя и включить выражение else в оператор if, потому что, когда я выбрал путь к сундуку, появилось не только сообщение «привидение», но и «кровавое лицо», зеркальный текст. Но теперь он отлично работает. – beginnercoder010812

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