简体   繁体   中英

How do I access the private lists from another class created by netbeans when i bind elements

I've tried making public static lists in the other class and setting them equal to the private ones but I get a massive staptrace which tells me that I cant clear the lists and that I cant set the lists. Please Help

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);

}

Here's the staptrace:

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)

In I extend javax.swing.JFrame with this class and then have my other classes extend this class

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);

}

}

Please note, some of the code I havent used in the programm is not complete yet

My database class

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;

}

Took out the useless auto-gen code

Your static List s are definitely not getting initialized. As long as I can see in your General class, these List s get their only chance to be initialized is inside database.getLists , unless initialized directly from another class, as they are public members.

Please check any point in your code where you suppose the lists could be initialized and be sure that those code snippets are executed before calling setLists .

EDIT

It looks like your getLists method does not initialize the static lists. Anyway, your method names are a little misleading, as getLists actually sets the lists inside the class instance, while setLists actually tries to copy the lists' content to the static members of another class.

Again, I can't find any initialization of the lists in the code you posted, like
programmeStatsListT = new ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM