Fehler bei Arrayübergabe an JComboBox

Muller

Mitglied
Hallo zusammen,

ich habe folgendes Problem an dem ich seit Stunden tüftle:

Also mit diesem Actionlistener wird der folgenden Methode das ausgewählt Item bereitgestellt.

[Java]
public class spielerTeamHeimAuswahlListener implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if(spielerTeamHeimAuswahl.getSelectedItem() == null)
{}
else
{
spielerTeamNameHeim = (String) spielerTeamHeimAuswahl.getSelectedItem();
}
}
}
[/Java]


Nun werden JComboBoxes je nach Eingabe der Anzahl erstellt.
Auf der linken Seite kann man Torschützen auswählen.
Auf der rechten Seite soll man dann andere Sachen auswählen können.
[Java]
public void erzeugeComboBoxes (int anzahlTore)
{
// Es wird ein Array von Textfeldern erzeugt. Die Anzahl liegt immer 2 über dem Index der JComboBox "anzahlSpielerAuswahl" liegt.
torSchuetzen = new JComboBox [anzahlTore + 1];
DefaultComboBoxModel[] torSchuetzenModel = new DefaultComboBoxModel[anzahlTore + 1];

torSchuetzenSteuerer = new JComboBox [anzahlTore + 1];
DefaultComboBoxModel[] torSchuetzenSteuererModel = new DefaultComboBoxModel[anzahlTore + 1];

String spielerListeDateiPfad = "documents/ligen/" +landHeimAuswahl.getSelectedItem()+ "/" +mannschaftHeimAuswahl.getSelectedItem()+ ".txt";

int yKoordinate = 350, i = 1;

for(i = 1; i <= torSchuetzen.length - 1; i++)
{
torSchuetzen = new JComboBox();
torSchuetzen.removeAllItems();
torSchuetzenModel = new DefaultComboBoxModel(leseDaten.leseNationalMannschaften(spielerListeDateiPfad));
torSchuetzen.setModel(torSchuetzenModel);
torSchuetzen.setBounds(110, yKoordinate, 220, 30);
torSchuetzen.setActionCommand(String.valueOf(i));
torSchuetzen.removeItemAt(torSchuetzen.getItemCount()-1);
benutzerEbene.add(torSchuetzen);

torSchuetzenSteuerer = new JComboBox();
torSchuetzenSteuerer.removeAllItems();
torSchuetzenSteuererModel = new DefaultComboBoxModel(leseDaten.leseSpielerTeamsMitglieder(spielerTeamNameHeim));
torSchuetzenSteuerer.setModel(torSchuetzenSteuererModel);
torSchuetzenSteuerer.setBounds(350, yKoordinate, 220, 30);
torSchuetzenSteuerer.setActionCommand(String.valueOf(i));
benutzerEbene.add(torSchuetzenSteuerer);

yKoordinate = yKoordinate + 40;
}
SwingUtilities.updateComponentTreeUI(benutzerEbene);
}
[/Java]

Die nachher übergebene Array wird hier erstellt.
[Java]
public Object[] leseSpielerTeamsMitglieder(String teamNameAuswahl)
{
// Initialisierung der einzelnen Reader.
FileReader neuerReader = null;
BufferedReader zeilenInformation = null;

Object [] spielerTeamMitglieder = new Object[6];

try
{
neuerReader = new FileReader("documents/playerTeams.txt");
zeilenInformation = new BufferedReader(neuerReader);

String teamName = null;
int i = 0;

// Die Schleife stoppt sobald keine Informationen in einer Zeile vorhanden sind (== null).
do
{
teamName = zeilenInformation.readLine();

// Der Teamname steht immer in Zeile nach den 50 Bindestrichen, welche eine Abgrenzung der Teams darstellen.
if(teamName.equals(teamNameAuswahl))
{
for(int k = 0; k < 4; k++)
{
teamName = zeilenInformation.readLine();
spielerTeamMitglieder = teamName;
i = i + 1;

if(teamName.equals("--------------------------------------------------"))
{
k = 4;
}
k = k + 1;
}
}
}while(teamName != null);
}

catch(IOException Ausnahme)
{
System.out.println("Im Moment ist noch keine Datei zum Auslesen vorhanden");
}

// Schließen der offenen Reader
finally
{
try
{
if (zeilenInformation != null)
{
zeilenInformation.close();
}

if (neuerReader != null)
{
neuerReader.close();
}
}

catch (IOException Ausnahme)
{
System.out.println("Es ist ein Fehler aufgetreten!");
}
}
return spielerTeamMitglieder;
}
[/Java]

Es funktioniert eigentlich alles, aber das Array wird irgendwie nicht richtig übergeben.
Vor allem ist es komisch das es beim den linken ComboBoxes richtig klappt.

Vllt kann jemand helfen.

Schon mal vielen Dank für Ratschläge.

Muller
 
Was geht den nicht? Werden die Combos nicht befüllt?

Wie wärs mit debuggen oder ein paar System.out.println() relevanter Parameter/ Werte an unterschiedlichen Stellen.
 
Hey,

also habe alles soweit schon kontrolliert.
Das Array wird in der angegebenen Methode richtig gefüllt.
Leider funktioniert die Übergabe an die ComboBox nicht richtig.
Die ComboBox bleibt leer und wird nicht befüllt. Außerdem gibts eine nullPointerException.
 
[Java]
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.DefaultComboBoxModel.<init>(DefaultComboBoxModel.java:53)
at FußballGUI.erzeugeComboBoxes(FußballGUI.java:400)
at FußballGUI$eingabeToreHeimListener.actionPerformed(FußballGUI.java:361)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:492)
at javax.swing.JTextField.postActionEvent(JTextField.java:705)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:820)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1633)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2886)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
at java.awt.Component.processEvent(Component.java:6044)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
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)
[/Java]
 
Anscheinend ist das, was du da an den Konstruktor eines der beiden DefaultComboBoxModels übergibst, doch null^^

Kannst du in Worte fassen, was du in der Methode
Code:
leseSpielerTeamsMitglieder
erreichen willst? Also Schritt für Schritt erklären? Ich verstehe das nämlich ehrlich gesagt nicht, was da passiert.
 
Also es gibt eine Datei die heißt playerTeams.txt

In dieser stehen Teams mit Namen und Spielern

z.B.

Team A
Spieler A
Spieler B
-------------------------------------------
Team B
Spieler C
Spieler D
-------------------------------------------

Jetzt sollen je nach Teamname die darunter liegenden Spieler ausgelesen werden und später in der ComboBox auswählbar sein.

Das klappt auch wunderbar. Die richtigen Namen stehen dann im Array.
Es wird nur nicht übergeben.
 
Ich glaube, dass der Fehler entsteht, wenn du mit
Code:
 Object [] spielerTeamMitglieder = new Object[6];
das Array von fester Größe erzeugst und dann nicht 6 Spieler lädst. Du musst evtl. am Ende das ganze in ein passend großes Array kopieren 😉
 
Ändere mal die beiden Zeilen:

Java:
torSchuetzenSteuerer[i].removeAllItems();
            torSchuetzenSteuererModel[i] = new DefaultComboBoxModel(leseDaten.leseSpielerTeamsMitglieder(spielerTeamNameHeim));

in dashier:

Java:
torSchuetzenSteuerer[i].removeAllItems();
Object[] o = leseDaten.leseSpielerTeamsMitglieder(spielerTeamNameHeim);
System.out.println(spielerTeamNameHeim);
for(i = 0; i < o.length; i++) {
  System.out.println(o[i]);
}
DefaultComboBoxModel(o);

Und füge dann mal die Ausgabe vor der Exception hier ein. Und dann evtl. noch den konkreten Abschnitt aus der Datei, aus der die in dem Moment geladenen Daten stammen.

Edit: Du musst natürlich eine andere Variable als i verwenden, weil du i vorher schon verwendest^^ GEstern Abend nicht mehr dran gedacht^^
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben