Hi I can't figure out why program just doesn't want to add records to a file. i figure there's something i'm not doing or something like that-- i new to java and have not coded in a while. that being said, help?

my program supposed to accept user information using JTextField and output the information in a .txt file. I use JFileChooser and added a add record method using output. writeObject and output.flush.

here is my code
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class BillingUI extends JPanel {

/**
*
*/
private static final long serialVersionUID = 1L;

protected final static String names[] = {"Taskname","date", "Timestart", "timestop", "Entertotal", "YourNotes"};

protected JLabel labels[];
protected JTextField fields[];
protected JButton dotask1, dotask2, dotask3;
protected JPanel innerPanelCenter, innerPanelSouth;

protected int size;

public static final int TASKNAME = 0, DATE = 1, TIMESTART =2, TIMESTOP = 3, ENTERTOTAL =4, YOURNOTES = 5 ;

public BillingUI(int mySize) {
size = mySize;
labels = new JLabel[size];
fields = new JTextField[size];

for (int count = 0; count < labels.length; count++)
labels[count] = new JLabel(names[count]);

for(int count = 0; count< fields.length; count++)
fields[count] = new JTextField();

innerPanelCenter = new JPanel();
innerPanelCenter.setLayout(new GridLayout(size, 3));

for (int count = 0; count < size; count++){
innerPanelCenter.add(labels[count]);
innerPanelCenter.add(fields[count]);

}

dotask1 = new JButton();
dotask2 = new JButton();
dotask3 = new JButton();

innerPanelSouth = new JPanel();
innerPanelSouth.add(dotask1);
innerPanelSouth.add(dotask2);
innerPanelSouth.add(dotask3);

setLayout(new BorderLayout());
add(innerPanelCenter, BorderLayout.CENTER);
add(innerPanelSouth, BorderLayout.SOUTH);

validate();


}

public JButton task1Button()
{
return dotask1;
}

public JButton task2Button()
{
return dotask2;
}

public JButton task3Button()
{
return dotask3;
}

public JTextField[] getFields()
{
return fields;
}

public void clearFields()
{
for(int count = 0; count < size; count++)
fields[count].setText(" ");
}

public void setFieldValues(String strings[])
throws IllegalArgumentException
{
if (strings.length != size)
throw new IllegalArgumentException("There must be" + size + " Characters");

for(int count= 0; count < size; count++ )
fields[count].setText(strings[count]);
}

public String[] getFieldValues()
{
String[] values = new String[size];
for(int count =0; count< size; count++)
values[count] = fields[count].getText();


return values;
}
}

import java.io.Serializable;
//import java.util.*;

public class TimeLog implements Serializable{

/**
*
*/
private static final long serialVersionUID = 1L;
private String TASKNAME;
private String DATE;
private String TIMESTART,TIMESTOP;
private int ENTERTOTAL;
private String YOURNOTES;

public TimeLog(){
this(" ", " "," "," ",0," ");
}

public TimeLog(String TASKNAME,
String DATE,
String TIMESTART,
String TIMESTOP,
int ENTERTOTAL,
String YOURNOTES)

{
setTASKNAME(TASKNAME);
setDATE(DATE);
setTIMESTART(TIMESTART);
setTIMESTOP(TIMESTOP);
setENTERTOTAL (ENTERTOTAL);
setYOURNOTES(YOURNOTES);
}


// task name
public void setTASKNAME(String tasknm)
{
TASKNAME = tasknm;
}

public String getTASKNAME()
{
return TASKNAME;
}
//date
public void setDATE(String date)
{
DATE = date;
}
public String getdate()
{
return DATE;
}

public void setTIMESTART(String time)
{
this.TIMESTART = time;
}
public String getTIMESTART()
{
return TIMESTART;
}
//time
public void setTIMESTOP(String time)
{
TIMESTOP = time;
}
public String gettime()
{
return TIMESTOP;
}
//enter total
public void setENTERTOTAL(int total)
{
ENTERTOTAL = total;
}

public int getENTERTOTAL()
{
return ENTERTOTAL;
}
//your notes

public void setYOURNOTES(String notes)
{
YOURNOTES = notes;
}

public String getYOURNOTES()
{
return YOURNOTES;
}

}
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

//import javax.swing.table.*;

//import jxl.*;
//import jxl.write.*;





public class CreateFile extends JFrame{

/**
*
*/
private static final long serialVersionUID = 1L;
private ObjectOutputStream output;
BillingUI userInterface;
private JButton enterButton, openButton, exitButton;

public CreateFile() {
super("Enter Productivity Infomation");

userInterface = new BillingUI(6);
getContentPane().add(userInterface, BorderLayout.CENTER);

openButton = userInterface.task1Button();
openButton.setText("save data to");

openButton.addActionListener(
new ActionListener(){

public void actionPerformed(ActionEvent event)
{
openFile();
}
}); // end action listener

exitButton = userInterface.task3Button();
exitButton.setText("Cancel");
exitButton.setEnabled(true);

exitButton.addActionListener(

new ActionListener(){
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});


enterButton = userInterface.task2Button();
enterButton.setText("Enter");
enterButton.setEnabled(true);

enterButton.addActionListener(

new ActionListener(){
public void actionPerformed(ActionEvent event)
{
addRecord();
}
});

addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent event)
{
if(output != null)
addRecord();

closeFile();
}
});

setSize(300,300);
setVisible(true);



}

void openFile()
{

JFileChooser chooseFile = new JFileChooser();


chooseFile.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("txt", "dat", "xls");
chooseFile.addChoosableFileFilter(filter);

int result = chooseFile.showSaveDialog(this);

if(result == JFileChooser.APPROVE_OPTION)
return;

File filename = chooseFile.getSelectedFile();

if(filename == null || filename.getName().equals(" "))
JOptionPane.showMessageDialog(this, "Invalid File name", "Invalid File Name", JOptionPane.ERROR_MESSAGE);

else{
try{
output = new ObjectOutputStream( new FileOutputStream(filename));

openButton.setEnabled(false);
enterButton.setEnabled(true);
}

catch(IOException ioException){
JOptionPane.showMessageDialog(this, "error opening file", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
void closeFile()
{
try{
output.close();
System.exit(0);
}

catch (IOException ioException){
JOptionPane.showMessageDialog(this, "Error Closing file", "Error", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}

public void addRecord()
{




int enternumber =0;


TimeLog record;
String fieldValues[] = userInterface.getFieldValues();

if(!fieldValues[BillingUI.ENTERTOTAL].equals("")){

try{
enternumber = Integer.parseInt(fieldValues[BillingUI.ENTERTOTAL]);


if (enternumber > 0) {

record = new TimeLog(fieldValues[BillingUI.TASKNAME],fieldValues[BillingUI.DATE], fieldValues[BillingUI.TIMESTART],
fieldValues[BillingUI.TIMESTOP], enternumber, fieldValues[BillingUI.YOURNOTES] );

output.writeObject(record);
output.flush();
}
else{
JOptionPane.showInputDialog(this, "total field must be an integer", JOptionPane.ERROR_MESSAGE);

}
userInterface.clearFields();
} // end try else block

catch(NumberFormatException | IOException formatException){
JOptionPane.showMessageDialog(this, "bad number dude", "invalid format/n must be integer greater than 0",
JOptionPane.ERROR_MESSAGE);
closeFile();

}

} // end if

}

public static void main(String args[])
{
new CreateFile();
}
}

this is my errors:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at CreateFile.addRecord(CreateFile.java:171)
at CreateFile$3.actionPerformed(CreateFile.java:78)
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$200(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$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.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$1.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)