JTable Drucken NullpointerException +JTable speichern

marcocux

Mitglied
Hallo,

ich hab zwei Fragen zu meinem Programmcode. Ich bekomme wenn ich eine JTable ausdrucken will immer eine NullpointerException, obwohl die Tabelle gefüllt ist. Außerdem habe ich zwei Methoden bekommen (nicht selber geschrieben), die die Daten aus der JTable abspeichern sollen, allerdings wird hier nur ein XML-Dokument mit den Rahmendaten der Tabelle erstellt. Was kann ich tun? Hier der Code:

Java:
public class athlet_erstellen extends Frame {
  // Anfang Attribute
  public String filename = "athleten_tabelle.xml";
  public boolean tabelleangelegt = false;
  private Label label_athlet_hinzufuegen = new Label();
  private Label label_create_name = new Label();
  private TextField textField_create_name = new TextField();
  private Label label_create_vorname = new Label();
  private TextField textField_create_vorname = new TextField();
  private Label label_create_nationalitaet = new Label();
  private TextField textField_create_nationalitaet = new TextField();
  private Label label1 = new Label();
  private Choice choice_create_disziplin = new Choice();
  private Label label2 = new Label();
  private Choice choice_create_anreisetag = new Choice();
  private Choice choice_create_anreisemonat = new Choice();
  private Label label3 = new Label();
  private Choice choice_create_abreisetag = new Choice();
  private Choice choice_create_abreisemonat = new Choice();
  public Label label_create_hotel = new Label();
  public Choice choice_create_hotel = new Choice();
  private Label label4 = new Label();
  private Choice choice_create_zimmerart = new Choice();
  private Button button_create_athleterstellen = new Button();
  private Label label_create_zahlweise = new Label();
  private Choice choice_create_zahlweise = new Choice();
  public DefaultTableModel tabModel;
  public JTable table;
  public TableColumnModel colmodel;
  public String[][] rowData = {};
  public String[] columnNames = {"HotelIndex","Name","Vorname","Nationalität","Disziplin","Hotel","Zimmerart","Zahlweise", "Anreisetag","Abreisetag","Anwesenheit"};
  public int x=0;
  public int y=1;
  public hotel_erstellen ho_erst;
  public int a;

  private Button athlet_erstellen_print = new Button();
  // Ende Attribute

  public athlet_erstellen(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 652;
    int frameHeight = 439;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten
    tabModel = new DefaultTableModel(rowData, columnNames);
    JTable table = new JTable( tabModel );
    colmodel = new DefaultTableColumnModel();
             table.setModel(tabModel);
       table.setColumnModel(colmodel);
           for(int i3=0;i3<11;i3++)
           {
           table.addColumn(new TableColumn(i3));
           }
    JFrame f = new JFrame("Athleten Datentabelle");
  f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  f.add( new JScrollPane(table) );
  f.pack();
  f.setVisible( true );
    label_athlet_hinzufuegen.setBounds(24, 8, 176, 25);
    label_athlet_hinzufuegen.setText("Athlet hinzufügen:");
    label_athlet_hinzufuegen.setFont(new Font("MS Sans Serif", Font.BOLD, 18));
    cp.add(label_athlet_hinzufuegen);
    label_create_name.setBounds(43, 61, 40, 16);
    label_create_name.setText("Name:");
    label_create_name.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label_create_name);
    textField_create_name.setBounds(88, 56, 353, 24);
    textField_create_name.setText("");
    cp.add(textField_create_name);
    label_create_vorname.setBounds(24, 100, 58, 16);
    label_create_vorname.setText("Vorname:");
    label_create_vorname.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label_create_vorname);
    textField_create_vorname.setBounds(88, 96, 353, 24);
    textField_create_vorname.setText("");
    cp.add(textField_create_vorname);
    label_create_nationalitaet.setBounds(8, 140, 70, 16);
    label_create_nationalitaet.setText("Nationalität:");
    label_create_nationalitaet.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label_create_nationalitaet);
    textField_create_nationalitaet.setBounds(88, 136, 353, 24);
    textField_create_nationalitaet.setText("");
    cp.add(textField_create_nationalitaet);
    label1.setBounds(24, 182, 53, 16);
    label1.setText("Disziplin:");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    choice_create_disziplin.setBounds(88, 176, 353, 24);
    cp.add(choice_create_disziplin);
    choice_create_disziplin.addItem("Disziplin wählen");
    choice_create_disziplin.addItem("100m Sprint");
    choice_create_disziplin.addItem("200m Sprint");
    choice_create_disziplin.addItem("400m Sprint");
    choice_create_disziplin.addItem("800m");
    choice_create_disziplin.addItem("1.000m");
    choice_create_disziplin.addItem("1500m");
    choice_create_disziplin.addItem("1 Meile");
    choice_create_disziplin.addItem("3.000m");
    choice_create_disziplin.addItem("5.000m");
    choice_create_disziplin.addItem("10.000m");
    choice_create_disziplin.addItem("4x100m Staffel");
    choice_create_disziplin.addItem("4x400m Staffel");
    choice_create_disziplin.addItem("3x800m Frauen");
    choice_create_disziplin.addItem("3x1.000m Männer");
    choice_create_disziplin.addItem("100m Hürden Frauen");
    choice_create_disziplin.addItem("110m Hürden Männer");
    choice_create_disziplin.addItem("3.000m Hinderniss");
    choice_create_disziplin.addItem("Weitsprung");
    choice_create_disziplin.addItem("Dreisprung");
    choice_create_disziplin.addItem("Hochsprung");
    choice_create_disziplin.addItem("Stabhochsprung");
    choice_create_disziplin.addItem("Kugelstoßen");
    choice_create_disziplin.addItem("Diskus");
    choice_create_disziplin.addItem("Speerwurf");
    choice_create_disziplin.addItem("Hammerwurf");
    label2.setBounds(8, 339, 68, 16);
    label2.setText("Anreisetag:");
    label2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label2);
    choice_create_anreisetag.setBounds(88, 336, 41, 24);
    choice_create_anreisetag.add("1");
    choice_create_anreisetag.add("2");
    choice_create_anreisetag.add("3");
    choice_create_anreisetag.add("4");
    choice_create_anreisetag.add("5");
    choice_create_anreisetag.add("6");
    choice_create_anreisetag.add("7");
    choice_create_anreisetag.add("8");
    choice_create_anreisetag.add("9");
    choice_create_anreisetag.add("10");
    choice_create_anreisetag.add("11");
    choice_create_anreisetag.add("12");
    choice_create_anreisetag.add("13");
    choice_create_anreisetag.add("14");
    choice_create_anreisetag.add("15");
    choice_create_anreisetag.add("16");
    choice_create_anreisetag.add("17");
    choice_create_anreisetag.add("18");
    choice_create_anreisetag.add("19");
    choice_create_anreisetag.add("20");
    choice_create_anreisetag.add("21");
    choice_create_anreisetag.add("22");
    choice_create_anreisetag.add("23");
    choice_create_anreisetag.add("24");
    choice_create_anreisetag.add("25");
    choice_create_anreisetag.add("26");
    choice_create_anreisetag.add("27");
    choice_create_anreisetag.add("28");
    choice_create_anreisetag.add("29");
    choice_create_anreisetag.add("30");
    choice_create_anreisetag.add("31");
    cp.add(choice_create_anreisetag);
    choice_create_anreisemonat.setBounds(144, 336, 105, 24);
    choice_create_anreisemonat.add("Januar");
    choice_create_anreisemonat.add("Februar");
    choice_create_anreisemonat.add("März");
    choice_create_anreisemonat.add("April");
    choice_create_anreisemonat.add("Mai");
    choice_create_anreisemonat.add("Juni");
    choice_create_anreisemonat.add("July");
    choice_create_anreisemonat.add("August");
    choice_create_anreisemonat.add("September");
    choice_create_anreisemonat.add("Oktober ");
    choice_create_anreisemonat.add("November");
    choice_create_anreisemonat.add("Dezember");
    cp.add(choice_create_anreisemonat);
    label3.setBounds(8, 379, 69, 16);
    label3.setText("Abreisetag:");
    label3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label3);
    choice_create_abreisetag.setBounds(88, 376, 41, 24);
    choice_create_abreisetag.add("1");
    choice_create_abreisetag.add("2");
    choice_create_abreisetag.add("3");
    choice_create_abreisetag.add("4");
    choice_create_abreisetag.add("5");
    choice_create_abreisetag.add("6");
    choice_create_abreisetag.add("7");
    choice_create_abreisetag.add("8");
    choice_create_abreisetag.add("9");
    choice_create_abreisetag.add("10");
    choice_create_abreisetag.add("11");
    choice_create_abreisetag.add("12");
    choice_create_abreisetag.add("13");
    choice_create_abreisetag.add("14");
    choice_create_abreisetag.add("15");
    choice_create_abreisetag.add("16");
    choice_create_abreisetag.add("17");
    choice_create_abreisetag.add("18");
    choice_create_abreisetag.add("19");
    choice_create_abreisetag.add("20");
    choice_create_abreisetag.add("21");
    choice_create_abreisetag.add("22");
    choice_create_abreisetag.add("23");
    choice_create_abreisetag.add("24");
    choice_create_abreisetag.add("25");
    choice_create_abreisetag.add("26");
    choice_create_abreisetag.add("27");
    choice_create_abreisetag.add("28");
    choice_create_abreisetag.add("29");
    choice_create_abreisetag.add("30");
    choice_create_abreisetag.add("31");
    cp.add(choice_create_abreisetag);
    choice_create_abreisemonat.setBounds(144, 376, 105, 24);
    choice_create_abreisemonat.add("Januar");
    choice_create_abreisemonat.add("Februar");
    choice_create_abreisemonat.add("März");
    choice_create_abreisemonat.add("April");
    choice_create_abreisemonat.add("Mai");
    choice_create_abreisemonat.add("Juni");
    choice_create_abreisemonat.add("July");
    choice_create_abreisemonat.add("August");
    choice_create_abreisemonat.add("September");
    choice_create_abreisemonat.add("Oktober ");
    choice_create_abreisemonat.add("November");
    choice_create_abreisemonat.add("Dezember");
    cp.add(choice_create_abreisemonat);
    label_create_hotel.setBounds(40, 216, 35, 16);
    label_create_hotel.setText("Hotel:");
    label_create_hotel.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label_create_hotel);
    choice_create_hotel.setBounds(88, 216, 353, 24);
    cp.add(choice_create_hotel);
    label4.setBounds(16, 256, 63, 16);
    label4.setText("Zimmerart:");
    label4.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label4);
    choice_create_zimmerart.setBounds(88, 256, 353, 24);
    cp.add(choice_create_zimmerart);
    choice_create_zimmerart.addItem("Einzelzimmer");
    choice_create_zimmerart.addItem("Doppelzimmer");
    button_create_athleterstellen.setBounds(368, 344, 153, 41);
    button_create_athleterstellen.setLabel("Athleten hinzufügen");
    button_create_athleterstellen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button_create_athleterstellen_ActionPerformed(evt);
      }
    });
    cp.add(button_create_athleterstellen);
    label_create_zahlweise.setBounds(16, 296, 64, 16);
    label_create_zahlweise.setText("Zahlweise:");
    label_create_zahlweise.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label_create_zahlweise);
    choice_create_zahlweise.setBounds(88, 296, 353, 24);
    cp.add(choice_create_zahlweise);
    choice_create_zahlweise.addItem("Selbstzahler");
    choice_create_zahlweise.addItem("PP Sports");
    //ho_erst = new hotel_erstellen("hotel_erstellen");
    //ho_erst.setVisible( false );
     //a = ho_erst.tabModelhotel.getRowCount();

    athlet_erstellen_print.setBounds(560, 368, 65, 25);
    athlet_erstellen_print.setLabel("Drucken");
    athlet_erstellen_print.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        athlet_erstellen_print_ActionPerformed(evt);
      }
    });
    cp.add(athlet_erstellen_print);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
    //loadTable();

  }


  // Anfang Methoden
  private void saveTable() {
        try {
            XMLEncoder o = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(filename)));
            o.writeObject(tabModel);
            o.writeObject(colmodel);
            o.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private boolean loadTable() {
       try {
            XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream(filename)));
            tabModel = (DefaultTableModel) d.readObject();
            table.setModel(tabModel);
            colmodel = (DefaultTableColumnModel) d.readObject();
            table.setColumnModel(colmodel);
            d.close();
        } catch (FileNotFoundException ex) {
            return false;
        }
        return true;
        }
  public void button_create_athleterstellen_ActionPerformed(ActionEvent evt) {
  if(tabelleangelegt == false)
  {
  Object[] ze = {"","","","","","","","","","",""};
  tabModel.addRow(ze);
  String name = textField_create_name.getText();
  String vorname = textField_create_vorname.getText();
  String nationalitaet = textField_create_nationalitaet.getText();
  Object[] disziplin = choice_create_disziplin.getSelectedObjects();
  Object[] hotel = choice_create_hotel.getSelectedObjects();
  Object[] zimmerart = choice_create_zimmerart.getSelectedObjects();
  Object[] zahlweise = choice_create_zahlweise.getSelectedObjects();
  Object[] anreisetag = choice_create_anreisetag.getSelectedObjects();
  Object[] anreisemonat = choice_create_anreisemonat.getSelectedObjects();
  Object[] abreisetag = choice_create_abreisetag.getSelectedObjects();
  Object[] abreisemonat = choice_create_abreisemonat.getSelectedObjects();
  String atag = (String)anreisetag[0];
  String amonat =(String)anreisemonat[0];
  String anreisedatum = (atag+"."+amonat);
  String abtag = (String)abreisetag[0];
  String abmonat =(String)abreisemonat[0];
  String abreisedatum = (abtag+"."+abmonat);
  tabModel.setValueAt(name,x,y);
  y++;
  tabModel.setValueAt(vorname,x,y);
  y++;
  tabModel.setValueAt(nationalitaet,x,y);
  y++;
  tabModel.setValueAt(disziplin[0],x,y);
  y++;
  if(hotel==null)
  {
  tabModel.setValueAt("Kein HOTEL!",x,y);
  y++;
  }
  else
  {
  tabModel.setValueAt(hotel[0],x,y);
  y++;
  }
  tabModel.setValueAt(zimmerart[0],x,y);
  y++;
  tabModel.setValueAt(zahlweise[0],x,y);
  y++;
  tabModel.setValueAt(anreisedatum,x,y);
  y++;
  tabModel.setValueAt(abreisedatum,x,y);
  y=1;
  x++;
  tabelleangelegt = true;
  saveTable();
  }
  else
  {
  Object[] ze = {"","","","","","","","","","",""};
  tabModel.addRow(ze);
    String name = textField_create_name.getText();
  String vorname = textField_create_vorname.getText();
  String nationalitaet = textField_create_nationalitaet.getText();
  Object[] disziplin = choice_create_disziplin.getSelectedObjects();
  Object[] hotel = choice_create_hotel.getSelectedObjects();
  Object[] zimmerart = choice_create_zimmerart.getSelectedObjects();
  Object[] zahlweise = choice_create_zahlweise.getSelectedObjects();
  Object[] anreisetag = choice_create_anreisetag.getSelectedObjects();
  Object[] anreisemonat = choice_create_anreisemonat.getSelectedObjects();
  Object[] abreisetag = choice_create_abreisetag.getSelectedObjects();
  Object[] abreisemonat = choice_create_abreisemonat.getSelectedObjects();
  String atag = (String)anreisetag[0];
  String amonat =(String)anreisemonat[0];
  String anreisedatum = (atag+"."+amonat);
  String abtag = (String)abreisetag[0];
  String abmonat =(String)abreisemonat[0];
  String abreisedatum = (abtag+"."+abmonat);
  tabModel.setValueAt(name,x,y);
  y++;
  tabModel.setValueAt(vorname,x,y);
  y++;
  tabModel.setValueAt(nationalitaet,x,y);
  y++;
  tabModel.setValueAt(disziplin[0],x,y);
  y++;
  if(hotel==null)
  {
  tabModel.setValueAt("Kein HOTEL!",x,y);
  y++;
  }
  else
  {
  tabModel.setValueAt(hotel[0],x,y);
  y++;
  }
  tabModel.setValueAt(zimmerart[0],x,y);
  y++;
  tabModel.setValueAt(zahlweise[0],x,y);
  y++;
  tabModel.setValueAt(anreisedatum,x,y);
  y++;
  tabModel.setValueAt(abreisedatum,x,y);
  y=1;
  x++;
  saveTable();
  }
    // TODO hier Quelltext einfügen

  //saveTable();
  }

  public void athlet_erstellen_print_ActionPerformed(ActionEvent evt) {
          try {
            table.print();
        } catch (Exception e) {
            e.printStackTrace();
        }


    // TODO hier Quelltext einfügen
  }

  // Ende Methoden

  public static void main(String[] args) {
    new athlet_erstellen("Athlet erstellen");
  }
}

Gruß, Marco
 
die Methode
Code:
private boolean loadTable() {
der die Tabelle initialisieren soll wird in dem geposteten Quellcode nicht aufgerufen!
 
Hey,

ja, weil das mit dem Speichern eben noch nicht klappt. Dann wird nichts geladen, weil wie gesagt nur die Rahmenbedingen für die Tabelle gespeichert werden. Wenn ich die Methode "verbaue", dann kommt es auch zur NullPointerException. Scheinbar funktioniert die Speicherfunktion nicht richtig.

Prinzipiell geht es ja beim Druck ja darum, dass er die aktuell vorhandene Liste ausdruckt, oder kann man das garnicht so machen?

LG
 
Zuletzt bearbeitet:
Die genaue Fehlermeldung wäre hilfreich, d.h. die Zeile, in der die Exception auftritt. Am besten der gesamte Stack Trace.
 
Hier der Fehlercode:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at athlet_erstellen.loadTable(athlet_erstellen.java:307)
	at athlet_erstellen.button_create_athleterstellen_ActionPerformed(athlet_erstellen.java:419)
	at athlet_erstellen$2.actionPerformed(athlet_erstellen.java:259)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
Bitte schau bei dir im Code was in Zeile 307 steht und poste diese Zeile. Also den Inhalt der Zeile. Denn die Nummerierung der Zeilen in dem von dir geposteten Code stimmen nicht mit der Nummerierung in deiner lokalen Datei überein.

Abgesehen davon unterscheidet sich die gepostete Variante sicherlich von deiner lokalen version, denn wie mein Vorredner schon sagte, wird loadTable() in dem geposteten Code nicht aufgerufen! Hast du vllt vergessen das "//" vor dem loadTable() Aufruf hier rauszutun?

Solange du uns nicht 1:1 (inkl. Leerzeilen etc) die Version hier rein kopierst, du du benutzt, können wir noch lange rumdiskutieren.
 

Neue Themen


Zurück
Oben