G
Guest
Gast
Ich bekomm bei meinem Kundenverwaltungsprogramm eine für mich unerklärliche Stackoverflow-Exception.
Ich habe 2 JFrames, ein JFrame in dem die Kunden und ein JFrame in dem die Artikel in einem JTable aufgelistet sind. Die Daten werden aus einer Datenbank ausgelesen und mittels DefaulTableModel geadded und den JTables zugewiesen.
(nur zur Info: Bei einer Veränderung der Kunden-/Artikeldaten wird abermals aus der Datenbank ausgelesen und der JTable über das DefaultTableModel gefüllt)
Ist ein Kunde ausgewählt und wird ein Doppelklick auf ein Artikel gemacht, soll ein weiteres JFrame (Warenkorb) erscheinen, das alle"bestellten" Artikel des Kunden, auch über einen JTable anzeigt.
Wird ein Artikel ausgewählt, wird dieser in die Datenbank geschrieben. Der Warenkorb holt sich bei jeder Aktualierung die Bestellungsdaten aus der Datenbank.
Das mal zum technischen Ablauf.
Die Exception tritt dann auf, wenn eine Instanz des Warenkorbs angelegt wird (was auch nur einmal geschieht).
Hier mal die Klasse Warenkorb:
(Selbst wenn ich nur eine Instanz des Warenkorbs habe und sont kein weiteres JFrame instanziiert habe, gibt es diese Exception. Was bitte ist so Speicherfressend???)
Ich habe 2 JFrames, ein JFrame in dem die Kunden und ein JFrame in dem die Artikel in einem JTable aufgelistet sind. Die Daten werden aus einer Datenbank ausgelesen und mittels DefaulTableModel geadded und den JTables zugewiesen.
(nur zur Info: Bei einer Veränderung der Kunden-/Artikeldaten wird abermals aus der Datenbank ausgelesen und der JTable über das DefaultTableModel gefüllt)
Ist ein Kunde ausgewählt und wird ein Doppelklick auf ein Artikel gemacht, soll ein weiteres JFrame (Warenkorb) erscheinen, das alle"bestellten" Artikel des Kunden, auch über einen JTable anzeigt.
Wird ein Artikel ausgewählt, wird dieser in die Datenbank geschrieben. Der Warenkorb holt sich bei jeder Aktualierung die Bestellungsdaten aus der Datenbank.
Das mal zum technischen Ablauf.
Die Exception tritt dann auf, wenn eine Instanz des Warenkorbs angelegt wird (was auch nur einmal geschieht).
Hier mal die Klasse Warenkorb:
(Selbst wenn ich nur eine Instanz des Warenkorbs habe und sont kein weiteres JFrame instanziiert habe, gibt es diese Exception. Was bitte ist so Speicherfressend???)
Code:
package kundenverwaltung;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
public class Warenkorb extends JFrame
{
private Steuerung steuerung;
private Container frameInhalt;
private Container buttonLeisteContainer;
private SortedTable warenkorbJTable;
private String []datenZeile;
private Object []überschriften={"Nr","Model",
"Artikelbeschreibung","Einzelpreis","Gesamtpreis"};
public Warenkorb(Steuerung steu)
{
//Komponenten initialisieren
initializeComponents();
this.setTitle("Futterbox - Warenkorb");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.steuerung = steu;
frameInhalt = this.getContentPane();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
//Fesnter mittig
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
this.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
this.setSize(400,400);
this.setLocation(screenSize.width-400,200);
//Komponenten dem Frame zuweisen
addComponents();
// Eventhandling
events();
show();
}
//initialisieren der Komponenten
private void initializeComponents()
{
frameInhalt = new Container();
buttonLeisteContainer = new Container();
frameInhalt.setLayout(new BorderLayout());
buttonLeisteContainer.setLayout(new FlowLayout(FlowLayout.RIGHT));
datenZeile=new String[4];
warenkorbJTable = new SortedTable(new DefaultTableModel());
warenkorbJTable.setCellsEditable(false);
warenkorbJTable.optimizeColumnWidth();
((SortedTable)warenkorbJTable).setResortOnModelChange( false );
}
//Komponenten der GUI zuweisen
private void addComponents()
{
frameInhalt.add(new JScrollPane(warenkorbJTable), BorderLayout.CENTER);
frameInhalt.add(buttonLeisteContainer, BorderLayout.SOUTH);
}
//Eventhandling an control geben
private void events()
{
warenkorbJTable.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
if (e.isPopupTrigger() && e.getButton() == e.BUTTON3)
{
//jPopupMenu.show(e.getComponent(), e.getX(), e.getY());
}
else if(e.getButton()==e.BUTTON1 && e.getClickCount()==2)
{
//steuerung.itemKundeBearbeitenActionPerformed();
}
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
warenkorbJTable.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_DELETE)
steuerung.löschenKundenbearbeitungActionPerformed();
}
public void keyTyped(KeyEvent e) {
}
});
}
public DefaultTableModel modelJTableFüllen(Vector waren)
{
DefaultTableModel tempModel = new DefaultTableModel(überschriften,0)
{
public Class getColumnClass(int columnIndex)
{
Class c = null;
try
{
Integer.parseInt(this.getColumnName(columnIndex));
c = Integer.class;
}
catch(NumberFormatException nfe)
{
c = String.class;
}
return c;
}
};
if(waren.size()>0)
{
Iterator it = waren.iterator();
Artikel a=null;
int index=0;
while(it.hasNext())
{
a=(Artikel)it.next();
datenZeile[0]=new String(""+a.getNr());
datenZeile[1]=new String(""+a.getModel());
datenZeile[2]=new String(""+a.getArtikelbeschreibung());
datenZeile[3]=new String("");
datenZeile[4]=new String("");
tempModel.addRow(datenZeile);
}
}
return tempModel;
}
protected void processWindowEvent(WindowEvent e)
{
if (e.getID() == WindowEvent.WINDOW_CLOSING)
{
steuerung.beendenActionPerformed();
}
}
public void setTitle(String t)
{
this.setTitle(this.getTitle()+" - "+t);
}
public SortedTable getwarenkorbJTable() {
return warenkorbJTable;
}
}