2014-04-26 2 views
0

Я пытаюсь напечатать данные в файл, но java создать файл, не записывая никаких данных.почему Java только создает файл без записи каких-либо данных в него

Данные хранятся в ArrayList, и я думаю, проблема из-за метода sData.size(). Часть метода действия используется, когда пользователь щелкает значок сохранения, и таблица не будет иметь никаких данных. Пользователь нажимает кнопку, чтобы добавить данные в Jtable.

Часть кода в конце дает сообщение об ошибке java.lang.NullPointerException.

public class ee extends JFrame { 
      String[] columnNames = {"#", "c1", "c2", "data column"}; 

      public final JTable table; 
      JToolBar toolBar; 
      private final JTextField enterText,startTime,endTime; 


      static DefaultTableModel cModel ; 
      JButton Obutton; 
      int counter = 1; 
      public static ArrayList<String> sData = new ArrayList<String>(); 
    public static ArrayList<String> eData = new ArrayList<String>(); 
    public static ArrayList<String> tData = new ArrayList<String>(); 

       public static void main(String[] args) throws IOException 
       { 
        ee is = new ee("iss"); 

       } 


      //the constrictor 
      public ee(String title){ 
      cModel =new DefaultTableModel(columnNames, 0);  
      table = new JTable(cModel); 

метод действия

Action saveAction = new AbstractAction("Save", saveIcon) { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        File myFile = new File("the-file-name.txt"); 
        try (PrintWriter writer = new PrintWriter(myFile)) { 

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

        writer.println(i+1 + "\n"); 
        writer.println(sData.get(i)+" --> " + eData.get(i)); 
        writer.println(tData.get(i)+"\n"); 

        } 
        }catch(FileNotFoundException ioEx){ 

        } 

       } 
      }; 
     } 

принимает данные из JTable и сохранить его в ArrayList

public static ArrayList<String> getTableSTimeData(){ 

    sData = new ArrayList<String>(); 

     for (int i=0; i < cModel.getRowCount(); i++){  
       Object val = cModel.getValueAt(i, 1); // value of ith row and 3rd column 
       sData.add((String) val); 

      } 

    return sData; 
} 

путь данных вставки в JTable

public class MenuBarMethod implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent a){ 
     Object buttonPressed=a.getSource(); 

     if(buttonPressed.equals(Obutton)){ 
      String STime = startTime.getText(); 
      String ETime = endTime.getText(); 
      String text = enterText.getText(); 
      clearEntity(); 
      cModel.addRow(new Object[] {getCounter(),STime, ETime, text}); 

     } 
     } 
    } 


} 
+0

'getTableSTimeData()' метод никогда не вызывается, следовательно, '' sData' является null'. – Braj

+0

Посмотрите на комментарий и код 'Object val = cModel.getValueAt (i, 1); // значение i-й строки и 3-го столбца – Braj

+0

Пожалуйста, напишите полный код, чтобы мы могли запустить его для решения проблемы. – Braj

ответ

0

Инициализировать 10 в момент декларации, чтобы избежать NullPointerException

public class ee extends JFrame { 

    ... 
    public static List<String> sData = new ArrayList<String>(); 
    public static List<String> eData = new ArrayList<String>(); 
    public static List<String> tData = new ArrayList<String>(); 
    ... 
} 
+0

, что правильно, я попробовал это, но все же это не печатает – loverBoy

+0

Комментарий не имеет значения, я прав, я его не забываю удалить – loverBoy

+0

, но теперь вы не получаете 'NullPointerException'. Правильно? – Braj