I'm in need of help for my programming project in Eclipse. Here is the GUI Screen:
When the "Done" Button in the GUI Interface is pressed, the user input in the editor pane would be displayed beside the "Result:" text. In this case, the word "test" would appear beside "Result", thereby becoming "Result: test".
Instead, I have an error called "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException", and the errors are highlighted in the pictures. I think the error is because I have a null value assigned to the variable "result", but I'm not sure how do I go about solving it.
Here is the StackTrace:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at controller.Controller.Done(Controller.java:16)
at Admin.Screen04$2.actionPerformed(Screen04.java:55)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
DataStorage:
package data;
import java.io.File;
import java.io.FileWriter;
import java.util.Vector;
import com.thoughtworks.xstream.XStream;
public class DataStorage {
private Vector<Info> Information;
private Vector<Person> personList;
private XStream xstream;
public DataStorage() {
{
this.Information = new Vector<Info>();
}
{
this.personList = new Vector<Person>();
this.xstream = new XStream();
Person[] personArr = (Person[]) this.xstream.fromXML(new File("saves/persons.xml"));
for (int i = 0; i < personArr.length; i++) {
this.personList.add(personArr[i]);
}
}
}
public void saveData() {
Person[] personArr = this.getAllPersons();
String xml = this.xstream.toXML(personArr);
try {
FileWriter file = new FileWriter("saves/persons.xml");
file.write(xml);
;
file.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void addPerson(Person person) {
this.addPerson(person);
}
private Person[] getAllPersons() {
Person[] PerArr = new Person[this.personList.size()];
this.personList.toArray(PerArr);
return PerArr;
}
public void addData(Info records) {
this.Information.add(records);
}
public Info[] getAllContents() {
Info[] opArr = new Info[this.Information.size()];
this.Information.toArray(opArr);
return opArr;
}
public void deleteCalculation(int index) {
this.Information.removeElementAt(index);
}
public void editCalculation(int index, Info newInfo) {
Information.setElementAt(newInfo, index);
}
}
Info:
package data;
public class Info {
private String number1;
private String result;
public Info() {
this.number1 = null;
this.result = null;
}
public Info(String number1, String result) {
this.number1 = number1;
this.result = result;
}
public String getNumber1() {
return number1;
}
public String getResult() {
return result;
}
public static void main(String[] args) {
}
}
Controller:
package controller;
import data.DataStorage;
import data.Info;
public class Controller {
private DataStorage dataStorage;
public Controller() {
}
public String Done(String number1) {
String result = number1;
Info Records = new Info(number1, result);
this.dataStorage.addData(Records);
return result;
}
public Info[] getAllContents() {
return this.dataStorage.getAllContents();
}
public void deleteCalculation(int index) {
this.dataStorage.deleteCalculation(index);
}
public void editCalculation(int index, data.Info Newcalc) {
this.dataStorage.editCalculation(index, Newcalc);
}
}
Screen04 (Which is the GUI Screen):
package Admin;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import gui.MainFrame;
public class Screen04 extends JPanel {
private MainFrame mainFrame;
private JLabel lblResult_1;
private JEditorPane editorPane;
public Screen04(MainFrame main) {
setBackground(Color.ORANGE);
this.mainFrame = main;
setLayout(null);
JLabel lblAddTracker = new JLabel("Add Trackers");
lblAddTracker.setForeground(Color.DARK_GRAY);
lblAddTracker.setFont(new Font("Tahoma", Font.BOLD, 20));
lblAddTracker.setBounds(107, 35, 142, 23);
this.add(lblAddTracker);
JButton btnBackToAdmin = new JButton("Back to Admin Page");
btnBackToAdmin.setBackground(Color.DARK_GRAY);
btnBackToAdmin.setForeground(Color.ORANGE);
btnBackToAdmin.setFont(new Font("Tahoma", Font.BOLD, 15));
btnBackToAdmin.setBounds(84, 355, 197, 23);
btnBackToAdmin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showAccount2();
}
});
this.add(btnBackToAdmin);
editorPane = new JEditorPane();
editorPane.setForeground(Color.ORANGE);
editorPane.setBackground(Color.DARK_GRAY);
editorPane.setBounds(25, 76, 303, 234);
this.add(editorPane);
JButton btnDone = new JButton("Done");
btnDone.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String number1 = String.valueOf(editorPane.getText());
String result = mainFrame.getController().Done(number1);
btnDone.setForeground(Color.ORANGE);
btnDone.setBackground(Color.DARK_GRAY);
lblResult_1.setText("" + result);
}
});
btnDone.setBounds(239, 312, 89, 25);
add(btnDone);
JLabel lblResult_1 = new JLabel("Result:");
lblResult_1.setBounds(79, 321, 46, 14);
add(lblResult_1);
}
protected void showAccount2() {
this.mainFrame.showAccount2();
}
}
Any help would be greatly appreciated. Thank you in advance!
As an additional help, what should I do so that when the "Done" Button in the GUI Interface is pressed, the user input would be stored into a vector called "Info", as well as displaying the words "Successfully Added" beside the text "Result:"?