2015-05-03 3 views
-1

У меня есть NullPointerException В пределах Tournament Класс и класс Test. Я вызываю метод Tournament для определения в классе Test, затем я назначаю его в классе Tournament для создания объектов Team. он дает мне NullPointerException на Tournament tour = new Tournament(); и File file = new(fileLocation);.try-catch NullPointerException Ошибка в двух разных классах

Я думаю, что это потому, что я объявил неправильный путь к файлу, но файл находится в папке проекта. Чтобы упростить установку каталога файла в классе Test, чтобы точно узнать, где проблема, а также изменить файл если мне нужно. Прокомментируйте, если вам нужны еще блоки классов.

тест:

Tournament tour = new Tournament(); 
tour.setFile("Tourney2Teams.csv"); 

Турнир:

Scanner input; 
    public String fileLocation; 

    public void setFile(String x) 
    { 
     this.fileLocation=x; 
    } 
    File file = new File(fileLocation); 

и это метод для чтения файла:

public void readingFile() 
    { 
     try{ 
      input = new Scanner(file).useDelimiter(","); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.print("File Not Found\n"); 
     } 
    } 
+0

Трудно видеть, что происходит с этим небольшим количеством кода и трассировкой стека. Также см. Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it/218510#218510 – copeg

+0

У вас есть отладчик? – MaxZoom

+0

Пожалуйста, добавьте полный код, не можете понять, что вы делаете.Как и в вашем классе турнира, вы инициализируете файл вне любого метода или конструктора, почему? И в вашем классе Test вы создаете объект Tournament и выполняете метод set вне любого метода. –

ответ

3

Вы должны инициализировать переменную файла внутри метода setFile.

public void setFile(String x) 
{ 
    this.fileLocation = x; 
    file = new File(fileLocation); 
} 
File file; 

В настоящее время он пытается инициализировать файл, используя fileLocation, прежде чем вы установили местоположение, отсюда NullPointerException.

Чтобы пояснить, когда вы строите турнир, он инициализирует все переменные, что означает, что он вызывает new File(fileLocation), как вы просили его. Не имеет значения, что вы сначала поместили метод в свой код; факт - это когда он создает новый экземпляр, fileLocation = null, и вы не сможете его установить, прежде чем он попытается его инициализировать.

+0

Редактировать: Добавлено в ответ –

+0

OK done, thanks –

+0

Спасибо, продолжайте хорошие ответы здесь. Я отредактировал его немного, чтобы он читался более четко, но пока все хорошо. – Makoto

0

Неправильный путь никогда не будет бросать NullPointerException, поэтому проблема здесь нет.

EDIT: File может бросить NullPointerException, когда указанный путь null. И вы вызываете его, прежде чем инициализировать fileLocation, попробуйте

public Tournament(String x){ 
    fileLocation=x; 
    file = new File(fileLocation); 
} 
1

Проблема заключается в том, что вы инициализацией file в Tournament классе во время строительства класса, но fileLocation инициализируется после этого в методе setFile. Для того, чтобы решить этот ход строительства File в setFile метод:

class Tournament { 

    private File file; 
    public void setFile(String fileLocation) 
    { 
     this.file = new File(fileLocation); 
    } 
    // ... 
} 

или создать файл в конструкторе вместо:

class Tournament { 

    private File file; 
    public Tournament(String fileLocation) 
    { 
     this.file = new File(fileLocation); 
    } 
    // ... 
} 

В обоих этих примерах переменная fileLocation член не кажутся необходимо, чтобы он был удален.

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