2015-03-22 3 views
-1

Я разбираюсь в XML-файле, используя SAX, но когда я вызываю загрузчик классов в классе, вызывается java.lang.InstantiationException.Как решить "java.lang.InstantiationException"?

Я отлаживал это по причине исключения: «Брошено, когда приложение пытается создать экземпляр класса с использованием метода newInstance в классе Class, но указанный объект класса не может быть создан, поскольку он является интерфейсом или абстрактного класса ".

Но класс location не является интерфейсом или абстрактным классом. Я также проверил, что класс находится в правильном пакете, и это так.

Кто-нибудь знает, почему в этом случае возникает исключение?

Исключение бросают только после первого Println в StartElement класса Parser:

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 
     if (qName.equals("location")){ 
      location = true; 

      System.out.println("Found a location..."); 
      //exception thrown after this statement as shown 
      //in the error output below 
      try { 
       //Read in the values for the attributes of the element <location> 
       int locationID = Integer.parseInt(atts.getValue("id")); 
       String locationName = atts.getValue("name"); 

       //Generate a new instance of Location on-the-fly using reflection. The statement Class.forName("gmit.Location").newInstance(); invokes the 
       //Java Class Loader and the calls the null (default) constructor of Location. 
       Location loc = (Location) Class.forName("gmit.Location").newInstance(); 
       loc.setId(locationID); //Now configure the Location object with an ID, Name, Description etc... 
       loc.setName(locationName); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     }else if (qName.equals("description")){ 
      description = true; 
      System.out.println("Found a description. You should tie this to the last location you encountered..."); 
     }else if (qName.equals("exits")){ 
      exits = true; 
      System.out.println("Found an exit. You should tie this to the last location you encountered..."); 
     }else if (qName.equals("item")){ 
      item = true; 
      System.out.println("Found an item. You should tie this to the last game-character you encountered if the boolean gameCharacter flag is true..."); 
     }else if (qName.equals("game-character")){ 
      gameCharacter = true; 
      System.out.println("Found a game character..."); 
     }else if (qName.equals("search-algorithm")){ 
      searchAlgorithm = true; 
      System.out.println("Found a search algo. You should tie this to the last game-character you encountered if the boolean gameCharacter flag is true..."); 
     } 
    } 

Мой полный класс местоположение:

http://hastebin.com/yofuyafipe.java

Ошибки бросают во время выполнения :

http://hastebin.com/jonozeyefe.avrasm

+0

Вероятно, вам нужен конструктор класса Location, который не принимает никаких аргументов. – sje397

+0

Не используйте форматирование кода для текста, который не является кодом, и не публикуйте ссылки на вопрос, который является частью вашего вопроса. Отправьте его здесь *. – EJP

+0

И в следующий раз ... включите полную стеклу. –

ответ

4

Класс Location не имеет конструктора no-args. (Он имеет два конструктора с аргументами заявленных ... так нет по умолчанию нет-арг конструктор.)

Решения:

  • Добавить не-арг конструктор.
  • Отразите поиск одного из объектов Constructor на объекте Class и вызовите его с помощью Constructor.newInstance(...) с аргументами, которые дают фактические значения аргумента конструктора.

Похоже, что первый вариант является лучшим в этом контексте ... 'Потому что похоже, что у вас нет необходимых значений аргументов в этой точке кода.

+0

Да, это была проблема, у меня не было конструктора по умолчанию. Следующие решения были решены: 'public Location() { \t \t super(); \t} ' –

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

  • Нет связанных вопросов^_^