2013-11-20 1 views
0

다른 클래스에서 public static리스트를 만들고 비공개 클래스와 동일하게 설정하려고 시도했지만 막대한 staptrace가 있습니다. 목록을 지울 수 없으며 목록을 설정할 수 없습니다. 여기 요소를 바인딩 할 때 netbeans에 의해 생성 된 다른 클래스의 비공개 목록에 액세스하는 방법

public void setLists() { 

    General.programmeStatsListT.clear(); 
    General.programmeStatsListT.addAll(this.programmeStatsList); 
    General.fightersListT.clear(); 
    General.fightersListT.addAll(this.fightersList); 
    General.userTableListT.clear(); 
    General.userTableListT.addAll(this.userTableList); 
    General.userStatsListT.clear(); 
    General.userStatsListT.addAll(this.userStatsList); 

} 

가 staptrace의 도움을하시기 바랍니다 :이 클래스 javax.swing.JFrame을 확장에서

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at Database.Database_Frame.setLists(Database_Frame.java:379) 
at Database.Database_Frame.<init>(Database_Frame.java:41) 
at GUI.G_Start_Frame.<init>(G_Start_Frame.java:14) 
at GUI.G_Start_Frame$4.run(G_Start_Frame.java:204) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

다음 내 다른 클래스는이 클래스를 확장해야

public class General extends javax.swing.JFrame { 


////////////////////////////DATABASE CODE//////////////////////////////// 
public static EntityManager DBWORKS; 
Database_Frame database; 


//List used as imterdetiaries between private table lists and the rest of the programme 
public static List<Database.Fighters> fightersListT; 
public static List<Database.ProgrammeStats> programmeStatsListT; 
public static List<Database.UserStats> userStatsListT; 
public static List<Database.UserTable> userTableListT; 

//Iterators for intermediatory lists 
public static ListIterator<Database.Fighters> fightersT_Iterator; 
public static ListIterator<Database.ProgrammeStats> programmeST_Iterator; 
public static ListIterator<Database.UserStats> userST_Iterator; 
public static ListIterator<Database.UserTable> userTT_Iterator; 


///////////////////MAPS, ARRAYS, DATABASE INTERATION////////////////////// 
protected Map<String, User> userT_TreeMap = new TreeMap<>(); 
protected ArrayList<String> userT_TreeTemp = new ArrayList<>(); 

protected boolean validateNewUser(Boolean valid, Boolean format, String username, String password, String name, String surname, String rights, String pic_Dir) { 

    if (name.isEmpty()) { 
     JOptionPane.showMessageDialog(null, "Please enter your name", "Missing Field", JOptionPane.ERROR_MESSAGE); 
    } else if (password.isEmpty()) { 
     JOptionPane.showMessageDialog(null, "Please enter your password", "Missing Field", JOptionPane.ERROR_MESSAGE); 
    } else if (surname.isEmpty()) { 
     JOptionPane.showMessageDialog(null, "Please enter your surname", "Missing Field", JOptionPane.ERROR_MESSAGE); 
    } else if (password.trim().length() < 8 || password.trim().length() > 30) { 
     JOptionPane.showMessageDialog(null, "Password must be between 8 and 30 characters long", "Input Error", JOptionPane.ERROR_MESSAGE); 
     G_Register_Frame.pwf_Password.setText(null); 
     A_Add_User.pwf_Password.setText(null); 

    } else if (name.trim().length() > 50) { 
     JOptionPane.showMessageDialog(null, "Name can only be 50 characters long", "Input Error", JOptionPane.ERROR_MESSAGE); 
     G_Register_Frame.txtf_Name.setText(null); 
    } else if (surname.trim().length() > 50) { 

     JOptionPane.showMessageDialog(null, "Surname can only be 50 characters long", "Input Error", JOptionPane.ERROR_MESSAGE); 
     G_Register_Frame.txtf_Surname.setText(null); 
     A_Add_User.txtf_Surname.setText(null); 

    } else { 

     for (int i = 0; i < name.length(); i++) { 
      if (!Character.isLetter(name.charAt(i))) { 
       format = false; 
       if (format == false) { 

        JOptionPane.showMessageDialog(null, "Name can only consist of letters", "Input Error", JOptionPane.ERROR_MESSAGE); 
        G_Register_Frame.txtf_Name.setText(null); 
        A_Add_User.txtf_Name.setText(null); 

        break; 

       } 
      } 
     } 

     for (int i = 0; i < surname.length(); i++) { 
      if (!Character.isLetter(surname.charAt(i))) { 
       format = false; 

       JOptionPane.showMessageDialog(null, "Surname can only consist of letters", "Input Error", JOptionPane.ERROR_MESSAGE); 
       G_Register_Frame.txtf_Surname.setText(null); 
       A_Add_User.txtf_Surname.setText(null); 
       break; 
      } 
     } 

     if (format == true) { 
      valid = true; 
     } 
    } 

    return valid; 
} 

protected void addUser(String username, String password, String name, String surname, String rights, String pic_Dir) { 

    userT_TreeMap.put(username, new User(username, password, name, surname, rights, pic_Dir)); 

} 

protected void writeDB_UserTBL() { 

    for (String temp : userT_TreeTemp) { 

     try { 
      DBWORKS.find(UserTable.class, temp); 
      DBWORKS.getTransaction().begin(); 
      DBWORKS.remove(temp); 
      DBWORKS.getTransaction().commit(); 
      DBWORKS.clear(); 

     } catch (Exception e) { 

      JOptionPane.showMessageDialog(null, "Database update failed.\nPlease report this error to the administrator", "ERROR " + e, JOptionPane.ERROR_MESSAGE); 

     } 

    } 

    for (Map.Entry<String, User> entry : userT_TreeMap.entrySet()) { 

     UserTable user = new UserTable(); 
     user.setId(entry.getKey()); 
     user.setFirstName(entry.getValue().getName()); 
     user.setSurname(entry.getValue().getSurname()); 
     user.setPassword(entry.getValue().getPassword()); 
     user.setRights(entry.getValue().getRights()); 
     user.setPicDir(entry.getValue().getPic_Dir()); 

     DBWORKS.getTransaction().begin(); 
     DBWORKS.persist(user); 
     DBWORKS.getTransaction().commit(); 

    } 

    database.clearLists(); 
    database.addAll(); 
    //database.setLists(); 
    database.getLists(programmeStatsListT, fightersListT, userStatsListT, userTableListT); 

    userTT_Iterator = userTableListT.listIterator(0); 
    database.setUserT(database.userT); 

    userT_TreeMap.clear(); 

    database.addAll(); 

    database.clearLists(); 
    database.addAll(); 

    fillUserT_TreeMap(); 

} 

protected void fillUserT_TreeMap() { 

    for (UserTable temp : userTableListT) { 

     userT_TreeMap.put(temp.getId(), new User(temp.getId(), temp.getPassword(), temp.getFirstName(), temp.getSurname(), temp.getRights(), temp.getPicDir())); 

    } 

    userT_TreeTemp.clear(); 

    for (Map.Entry<String, User> entry : userT_TreeMap.entrySet()) { 

     userT_TreeTemp.add(entry.getKey()); 

    } 

} 

///////////////////////GENERAL METHODS//////////////////////////////////// 
protected void safeEnd(boolean end) { 
    System.exit(0); 
} 

protected void backToMain() { 
    new G_Main_Menu_Frame().setVisible(true); 
    this.setVisible(false); 
} 

protected void backToAdmin_Menu() { 
    new A_Admin_Menu_Frame().setVisible(true); 
    this.setVisible(false); 
} 

protected void backToUser_Menu() { 
    new U_User_Menu().setVisible(true); 
    this.setVisible(false); 
} 

protected void backToPredict() { 

    new U_Predict_Frame().setVisible(true); 
    this.setVisible(false); 

} 

protected void backToDef_Res() { 
    new A_Define_Frame().setVisible(true); 
    this.setVisible(false); 
} 

protected void goToDef_Frame() { 
    new A_Def_Res().setVisible(true); 
    this.setVisible(false); 
} 

protected void backToUser_Man() { 
    new A_User_Frame().setVisible(true); 
    this.setVisible(false); 
} 

protected void backToA_Stats() { 
    new A_Statistics_Frame().setVisible(true); 
    this.setVisible(false); 
} 

protected void printList() { 

    for(int i = 0; 0 < userTableListT.size(); i++) { 

    System.out.println("" + userStatsListT.get(i)); 

    } 

} 

protected void setIterators() { 

    fightersT_Iterator = fightersListT.listIterator(0); 
    programmeST_Iterator = programmeStatsListT.listIterator(0); 
    userST_Iterator = userStatsListT.listIterator(0); 
    userTT_Iterator = userTableListT.listIterator(0); 

} 

}

코드에 나와있는 코드 중 일부는 아직 완성되지 않았습니다.

내 데이터베이스 클래스

public final class Database_Frame extends javax.swing.JFrame{ 

public Fighters fighters; 
public ProgrammeStats programme; 
public UserStats userS; 
public UserTable userT; 

public ListIterator<Database.Fighters> fightersListIterator; 
public ListIterator<Database.ProgrammeStats> programmeListIterator; 
public ListIterator<Database.UserStats> userStatsListIterator; 
public ListIterator<Database.UserTable> userTableListIterator; 



public Database_Frame() { 
    initComponents(); 

    setEntityMan(General.DBWORKS); 
    setUserS(userS); 
    setUserT(userT); 
    setProgramme(programme); 
    setFighters(fighters); 

    fightersListIterator = fightersList.listIterator(0); 
    programmeListIterator = programmeStatsList.listIterator(0); 
    userTableListIterator = userTableList.listIterator(0); 
    userStatsListIterator = userStatsList.listIterator(0); 

    setLists(); 

    //setLists(programmeStatsListT, fightersListT, userStatsListT, userTableListT); 


public Fighters getFighters() { 
    return fighters; 
} 

public void setFighters(Fighters fighters) { 
    Fighters oldFighters = this.fighters; 
    this.fighters = fighters; 
    firePropertyChange("fighters", oldFighters, fighters); 
} 

public ProgrammeStats getProgramme() { 
    return programme; 
} 

public void setProgramme(ProgrammeStats programme) { 
    ProgrammeStats oldProgramme = this.programme; 
    this.programme = programme; 
    firePropertyChange("programme", oldProgramme, programme); 
} 

public UserStats getUserS() { 
    return userS; 
} 

public void setUserS(UserStats userS) { 
    UserStats oldUserStats = this.userS; 
    this.userS = userS; 
    firePropertyChange("userS", oldUserStats, userS); 
} 

public UserTable getUserT() { 
    return userT; 
} 

public void setUserT(UserTable userT) { 
    UserTable oldUserTable = this.userT; 
    this.userT = userT; 
    firePropertyChange("userT", oldUserTable, userT); 
} 

public void setLists() { 

    General.programmeStatsListT.clear(); 
    General.programmeStatsListT.addAll(this.programmeStatsList); 
    General.fightersListT.clear(); 
    General.fightersListT.addAll(this.fightersList); 
    General.userTableListT.clear(); 
    General.userTableListT.addAll(this.userTableList); 
    General.userStatsListT.clear(); 
    General.userStatsListT.addAll(this.userStatsList); 

} 

public void getLists(List programmeStatsList, List fightersList, List userStatsList, List userTableList) { 

    this.programmeStatsList = programmeStatsList; 
    this.fightersList = fightersList; 
    this.userStatsList = userStatsList; 
    this.userTableList = userTableList; 

} 

public void clearLists() { 

    programmeStatsList.clear(); 
    fightersList.clear(); 
    userStatsList.clear(); 
    userTableList.clear(); 

} 

public void addAll() { 

    programmeStatsList.addAll(programmeStatsQuery.getResultList()); 
    fightersList.addAll(fightersQuery.getResultList()); 
    userStatsList.addAll(userStatsQuery.getResultList()); 
    userTableList.addAll(userTableQuery.getResultList()); 

} 

public void setEntityMan(EntityManager eMan) { 

    eMan = FairyTail_DBPUEntityManager; 

} 

당신의 정적 List의가 확실히 초기화되지 않아요 쓸모 자동 세대 코드

+0


같은 당신이 게시 코드 목록의 초기화를 찾을 수 없습니다? –

+1

방대한 스택 트레이스를 게시하지 않은 이유는 무엇입니까? 때로는 두려운 것이지만, 버그를 찾고 해결하는 데 가장 중요한 정보입니다! – isnot2bad

+1

상호 작용하려는 목록 중 하나 이상이 초기화되지 않았을 것입니다. 어떤 라인이 예외를 던지고 있습니까? – Taylor

답변

0

을했다. 내가 General 클래스에서 볼 수있는 한, List은 초기화 될 수있는 기회가 오직 database.getLists입니다. public 멤버이므로 다른 클래스에서 직접 초기화하지 않는 한.

목록에서 초기화 할 수 있다고 생각되는 지점을 확인하고 setLists을 호출하기 전에 해당 코드 조각을 실행해야합니다. 당신의 getLists 방법은 정적 목록을 초기화하지 않는 것처럼

편집

것 같습니다. 어쨌든 getLists은 실제로 클래스 인스턴스 내에 목록을 설정하는 반면, setLists은 실제로 목록의 내용을 다른 클래스의 정적 멤버에 복사하려고 시도하기 때문에 메서드 이름이 약간 오도 된 것입니다.

다시 말하지만, 난 당신이 게터 및 세터 대해 이야기 programmeStatsListT = new ...

+0

감사 ... 내 코드 – retroSpect

+0

을 다시 점검하겠습니다. 위를 확인하십시오. –

+0

정말 고마워요. 코드에 도달하여 내 바보 같은 오류를 고쳤습니다. 이제 저는 올해 평가 작업을 마칠 수 있습니다 ... – retroSpect