I’m making an assignment planner, where one enters the assignment for the day in a JTextArea. I made the JTextAreas static, so I could access them outside the class. To clean up my code, I decided to use for loops and put the JTextAreas into static instance variable- arrays. But, when I try to access a JTextArea through an array, I get a NullPointerException. Here is an example of the declaration of a JTextArea:
static JTextArea MondayEng;
The arrays (one per subject) are declared as so:
static JTextArea[] Eng = new JTextArea[]{
MondayEng,
TuesdayEng,
WednesdayEng,
ThursdayEng,
FridayEng
};
And then there is a JTextArea[][] which contains the arrays:
static JTextArea[][] subjs = new JTextArea[][] {Eng, Hist, Math, Sci, Lang};
The JTextAreas are instantiated inside the JFrame (Called PWin), like this:
MondayEng = new JTextArea();
MondayEng.setBounds(664, 68, 153, 100);
contentPane.add(MondayEng);
I’ll try to get the contents of the JTextAreas like this:
for (int i = 0; i < PWin.subjs.length; i++) { // Iterate through subjects
String sub = subjects[i]; // Store the current subject in a variable
for (int y = 0; y < days.length; y++) { // Iterate through days in week
String day = days[y]; // Store the current day in a variable
String str = PWin.subjs[i][y].getText(); // Get the text of the JTextArea currently selected, plop it in a string
The this is exception when saving files:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at PSave.<init>(PSave.java:19)
at PWin$1.actionPerformed(PWin.java:262)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6373)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6138)
at java.awt.Container.processEvent(Container.java:2085)
at java.awt.Component.dispatchEventImpl(Component.java:4735)
at java.awt.Container.dispatchEventImpl(Container.java:2143)
at java.awt.Component.dispatchEvent(Component.java:4565)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212)
at java.awt.Container.dispatchEventImpl(Container.java:2129)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4565)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:638)
at java.awt.EventQueue$1.run(EventQueue.java:636)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:652)
at java.awt.EventQueue$2.run(EventQueue.java:650)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:649)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Any help will be appreciated a lot!
It seems like your problem is that at the time you are creating your arrays, the JTextAreas haven’t been constructed yet. Java is pass by value, so when you pass in the names of JTextAreas that are to be constructed later it is the same as passing null.