2015-10-15 2 views
-3

Я пытаюсь написать программу, которая принимает записи и помещает их в список. Однако, когда я проверить функцию, которая считывает данные из файла, я получаю сообщение об ошибке с указаниемJava: нестатический класс и статический вызов

Cannot make a static reference to the non-static field aBook 

Когда я делаю это, однако статичны, программа просто печатает пустую запись.

Вот соответствующие части Главное:

import java.io.*; 
import java.util.*; 

public class AddressBookApplication { 
    AddressBook aBook = new AddressBook(null, null, null, null, null, null, null, null); 

    public static void main(String[] args) { 
    AddressBookApplication start = new AddressBookApplication(); 

    Scanner input = new Scanner(System.in); 
    Menu mainM = new Menu(); 
    String filename = " "; 

    mainM.mainMenu();       //Prints out a basic menu with options for input. 
    System.out.println("t) Read Test"); 
    String testChar = "";  //Activate test 
    testChar = input.next(); 
    if(testNumber.equals("t")){ 
     filename = "testfile.txt"; 
     start.init(filename); 
     System.out.println(aBook); 

    } 

Затем программа переходит к инициализации для чтения файла:

public void init(String f){ 
    AddressEntry newEntry = new AddressEntry(); 
    File file = new File(f); 
    try { 
     FileReader fi = new FileReader(file); 
     BufferedReader buffR = new BufferedReader(fi); 
     String lineRead; 
     while((lineRead = buffR.readLine()) != null){ 
      lineRead = buffR.readLine(); 
      newEntry.setFNAME(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setLNAME(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setStreet(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setCity(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setState(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setZip(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setPhone(lineRead); 
      lineRead = buffR.readLine(); 
      newEntry.setEMAIL(lineRead); 
      aBook.addEntry(newEntry); 
     } 
     buffR.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
} 

AddressBook класс:

import java.util.*; 

public class AddressBook extends AddressEntry { 

public AddressBook(String fn, String ln, String st, String ci, String sta, String zi, String tp, String em){ 
    super();} 

List<AddressEntry> bookA = new LinkedList<AddressEntry>(); 
public void addEntry(AddressEntry a){ 
    bookA.add(a); 
    } 
` 

Если вам нужен класс AddressEntry, я тоже могу опубликовать его, но я уверен, что проблема Я исхожу из моего основного().

+0

Java: нестатический класс и статический вызов, исключение времени компиляции само по себе говорит все. Вы делаете неправильный доступ. Другие уже указали, что вам нужно сделать для решения вашей проблемы. – Acewin

ответ

-1

Если вы собираетесь ссылаться aBook, что вам нужно сделать переменной статичной:

public static AddressBook aBook 
+0

Проблема в том, когда я это делаю, программа просто печатает пустую запись. – rreeve0102

+1

@ rreeve0102, это совершенно другая проблема. – BlackHatSamurai

-1

Поскольку основной() является статическим, эта линия, скорее всего, вызывает вопрос:

System.out.println(aBook); 

Поскольку вы создали экземпляр AddressBookApplication в главном названии, в начале запуска есть ссылка на aBook, чтобы вы могли позвонить:

System.out.println(start.aBook); 
Смежные вопросы