CardLayout.show() -> NullPointerException

Status
Nicht offen für weitere Antworten.

farmer

Mitglied
Moin!

Vorweg: Ich bin mir bewusst, dass man dieses Problem eleganter lösen kann. Es geht mir auch nicht um das Ergebnis an sich, sondern darum möglichst viele verschiedene Wege mal auszuprobieren.

Ich möchte also folgendes tun (als Teil eines weitaus größeren Programms):
Ich habe zwei Container, im ersten eine "feste" JList. Durch drücken eines JButtons möchte ich einen Eintrag in der ersten Liste erzeugen, eine neue Liste im zweiten Container erzeugen und den Eintrag und die neue Liste verknüpfen. Im zweiten Container ist ein CardLayout und im ersten die benötigten Listener (auch für den Button) implementiert. Das erzeugen eines neuen Eintrages erfolgt über ein DefaultListModel und der Methode addElement(String), die den String von einem JDialog bekommt. Danach erzeuge ich eine neue JList und gebe sie mit add(JList,String) an den zweiten Container und sein CardLayout. Der Eintrag in der ersten Liste ist also über den in ihr enthaltenen String mit der neuen JList verknüpft. (Es ist gewährleistet, dass es immer nur einen Eintrag mit dem selben Inhalt gibt!)
Nun müsste ich doch mit einem entsprechend implementierten ListSelectionEvent "e" und einer show()-Methode angewandt auf das CardLayout per

show(zweiter_Container, ((String)((JList) e.getSource()).getSelectedValue()))

[ (JList) e.getSource() liefert hierbei die "feste" Liste ]

das CardLayout dazu bringen, die JList anzuzeigen. Doch jedesmal, wenn die show()-Methode aufgerufen wird, bekomme ich eine NullPointerException...

Ein "System.out.println( ((JList) e.getSource()).getSelectedValue() )" liefert aber den korrekten Eintrag in der Liste, und damit doch auch den Namen der Card?...oder muss hier _genau_ das Objekt übergeben werden, mit dem ich add() aufgerufen habe?

Ich wäre für jeden Hinweis dankbar! Ich sitze an diesem Problem nämlich schon mehrere Tage und Nächte und es bremst mich momentan erheblich....

Den Quelltext der benötigten 2 Klassen hänge ich unten mal an, sie werden in einer anderen Klasse instanziiert und verknüpft:

Code:
class PopupOrdnerEingabe extends JDialog implements KeyListener, ActionListener {

	/**
	*Erstellt ein Popup zur Namensgebung eines neuen ListItems und setzt auch das auslesen des Textfeldes sowie das
	*Benennen und Einfügen des neuen Items in die Liste um. Implementiert alle
	*benötigten Listener. Bekommt dazu das DefaultListModel durchgereicht.
	*Außerdem erstellt es die zum Item dazugehörige (externe) JList, und fügt sie sowohl in den (externen) Container als
	*auch in das CardLayout des Containers ein [addLayoutComponent(comp,name)].
	*/

	DefaultListModel ListOrdnerDaten;			//Das Modell (Daten), das hinter der OrdnerListe steht
	JTextField Eingabefeld;						//Ein neues Eingabefeld für jede neue Instanz der Klasse...es gibt eh nur eine
	Container ContainerInternDateiListe;		//Innerer Container für die (externe) DateiListe (also, ohne das Label über der Liste etc)
	CardLayout ContainerInternDateiListeLayout;	//Layout des (externen) DateiListe-Containers

	public PopupOrdnerEingabe (DefaultListModel ListOrdnerDaten, DJMixerContainer Hauptfenster,Container ContainerInternDateiListe, CardLayout ContainerInternDateiListeLayout) {

		super(Hauptfenster,"Neuer Ordner",true);
		this.ContainerInternDateiListe = ContainerInternDateiListe;
		this.ContainerInternDateiListeLayout = ContainerInternDateiListeLayout;
		this.setLayout(new BorderLayout());
		this.ListOrdnerDaten = ListOrdnerDaten;
		this.Eingabefeld = new JTextField(100);
		this.Eingabefeld.addKeyListener(this);
		this.setResizable(false);
		this.setSize(400,80);
		this.add(new Label("Bitte einen Namen eingeben und mit ENTER bestätigen!"),BorderLayout.NORTH);
		this.add(this.Eingabefeld,BorderLayout.CENTER);

	}

	public static JList erzeugeListe(){		//Hilfsmethode um eine unbenannte Instanz einer JList mehrmals benutzen zu können.

		String[] data = {"one", "two", "three", "four"};	//nur zu testzwecken, die wird später anders gefüllt
		return new JList(data);

	}

	public void keyPressed(KeyEvent e)		//Methode des KeyListener für die Textzeile (Enter drücken)
	{

		if(e.getKeyCode()==10){

			if(!this.Eingabefeld.getText().trim().isEmpty()){

				String auslesen = this.Eingabefeld.getText().trim();

					for(int i = 0; i< ListOrdnerDaten.getSize();i++){
						if(auslesen.equals(ListOrdnerDaten.get(i))) {
							this.Eingabefeld.setText(null);
							return;
						}
					}

				JList tempListe = PopupOrdnerEingabe.erzeugeListe();

				this.ListOrdnerDaten.addElement(auslesen);	//Erzeugt die Benutzereingabe als Item in dem Modell der OrdnerListe
				this.ContainerInternDateiListe.add(tempListe,auslesen);//Fügt eine neue JList dem Container der DateiListe hinzu
				this.Eingabefeld.setText(null);
				this.setVisible(false);

				this.ContainerInternDateiListe.validate();

				//this.ContainerInternDateiListeLayout.show(this.ContainerInternDateiListe, auslesen);
				//System.out.println( auslesen );

				//auslesen = null;
			}
			else{
				this.Eingabefeld.setText(null);
			}
		}
	}
	public void keyTyped(KeyEvent e){}
	public void keyReleased(KeyEvent e){}

	public void actionPerformed(ActionEvent ae) {		//Methode des ActionListener (Button drücken)

		this.setVisible(true);

	}

}

class DJMixerOrdnerListListener implements ListSelectionListener {

	/**
	*Implementiert einen ListSelectionListener, von dem eine Instanz mit der OrdnerListe verknüpft wurde
	*und den Wert der Selection an die show()-Methode des CardLayouts des (externen) DateiListe-Containers übergibt.
	*Damit wird jedem String-Item in der OrdnerListe eine JList im DateiListe-Container zugeordnet.
	*/

	Container ContainerInternDateiListe;
	CardLayout ContainerInternDateiListeLayout;

	public DJMixerOrdnerListListener(Container ContainerInternDateiListe, CardLayout ContainerInternDateiListeLayout){

		this.ContainerInternDateiListe = ContainerInternDateiListe;
		this.ContainerInternDateiListe = ContainerInternDateiListe;

	}

	public void valueChanged(ListSelectionEvent e) {

			if(!e.getValueIsAdjusting()) {
				this.ContainerInternDateiListeLayout.show(this.ContainerInternDateiListe, ((String)((JList) e.getSource()).getSelectedValue()));
				//System.out.println( ((JList) e.getSource()).getSelectedValue() );
				//System.out.println(this.ContainerInternDateiListe.getComponentCount());
			}

	}

}

Ich nehme auch gerne Verbesserungsvorschläge für meinen Programmierstil entgegen....ich habe noch nie Feedback bekommen ;-)
 
S

SlaterB

Gast
an erster Stelle bei sowas überprüft man, ob das Layout überhaupt da ist:

System.out.println("layout ist: "+ContainerInternDateiListeLayout);

es ist nämlich null und ich überlasse dir mal kurz selber,
in den 20 Zeilen von class DJMixerOrdnerListListener den einfachen Grund zu finden
(Fragestellung: warum sollte das Layout nicht null sein?)
 

André Uhres

Top Contributor
Variablennamen immer mit kleinem Anfangsbuchstaben schreiben.
Vermeide lange Namen sowie lange Parameterlisten.
Hier mal ein einfaches Beispiel: CardDemo.jar (Quellcode im jar)
 

farmer

Mitglied
Neeiiiiiiiiin -_-

Ok, Tomaten auf den Augen...vielen Dank, ich arbeite wohl schon zu lange an dem Quelltext. Das mit den langen Namen hab ich jetzt wohl kapiert :x , aber wieso lange Parameterlisten vermeiden?
 

André Uhres

Top Contributor
Was für Namen gilt, das gilt gleicherweise für Parameterlisten:
je kürzer sie sind, desto einprägsamer und leichter benutzbar sind sie.
Mehr als drei Parameter sind in der Regel zu vermeiden, weniger ist besser.
Das gilt natürlich ganz besonders für öffentliche Schnittstellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F CardLayout.show() funktioniert teilweise nicht AWT, Swing, JavaFX & SWT 5
L CardLayout - Show klappt nicht AWT, Swing, JavaFX & SWT 7
I Von Menü: Seite zu Seite springen (CardLayout) AWT, Swing, JavaFX & SWT 8
H CardLayout beschränken AWT, Swing, JavaFX & SWT 2
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
J CardLayout AWT, Swing, JavaFX & SWT 3
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
padde479 LayoutManager CardLayout wechselt die Karten nicht AWT, Swing, JavaFX & SWT 5
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
F Swing Cardlayout aufräumen AWT, Swing, JavaFX & SWT 4
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
Q CardLayout und Klassenmethodenzugriff AWT, Swing, JavaFX & SWT 11
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
C CardLayout in BorderLayout? AWT, Swing, JavaFX & SWT 36
W Swing Probleme mit CardLayout AWT, Swing, JavaFX & SWT 28
D JMenuBar - CardLayout (Klasse anzeigen) AWT, Swing, JavaFX & SWT 3
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
S LayoutManager Card des CardLayout mit MenuItem auswaehlen AWT, Swing, JavaFX & SWT 9
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
D Richtige implimentierung eines CardLayout AWT, Swing, JavaFX & SWT 3
P CardLayout - Anzeigeproblem AWT, Swing, JavaFX & SWT 2
I LayoutManager CardLayout mit anonymen Components AWT, Swing, JavaFX & SWT 4
Private Void LayoutManager Cardwechsel im CardLayout auch von Card aus? AWT, Swing, JavaFX & SWT 6
E LayoutManager Erster Versuch mit Cardlayout AWT, Swing, JavaFX & SWT 2
hdi LayoutManager Problem mit CardLayout AWT, Swing, JavaFX & SWT 11
C Problem mit CardLayout :( AWT, Swing, JavaFX & SWT 10
Dragonfire Swing CardLayout Maximum Size AWT, Swing, JavaFX & SWT 7
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
S Frage/Problem CardLayout AWT, Swing, JavaFX & SWT 2
H CardLayout - Card erstellen hinzufügen usw. bis MI (12.3.) AWT, Swing, JavaFX & SWT 2
G CARDLAYOUT AWT, Swing, JavaFX & SWT 2
D GroupLayout an un plötzlich is CardLayout Funktion tot? AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 2
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
H Cardlayout AWT, Swing, JavaFX & SWT 3
M CardLayout: Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Dialogfenster wird nicht aktualisiert/CardLayout AWT, Swing, JavaFX & SWT 6
m@nu StackOverflowError mit CardLayout? AWT, Swing, JavaFX & SWT 2
R CardLayout bei einem Quiz AWT, Swing, JavaFX & SWT 9
J Designfehler beim CardLayout() AWT, Swing, JavaFX & SWT 4
S Registerkarte mit CardLayout (AWT) erstellen ? AWT, Swing, JavaFX & SWT 6
D CardLayout Plus ? AWT, Swing, JavaFX & SWT 4
T CardLayout Ohne Cards/Reiter AWT, Swing, JavaFX & SWT 2
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
D NachoCalendar - Show Tasks AWT, Swing, JavaFX & SWT 2
R Show/Hide eines JPanels mit TitledBorder. AWT, Swing, JavaFX & SWT 11
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
Jose05 Nullpointerexception bei toArray() AWT, Swing, JavaFX & SWT 9
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
ZH1896ZH JavaFX kann NullPointerException nicht auflösen... :( AWT, Swing, JavaFX & SWT 3
M NullPointerException / Controller AWT, Swing, JavaFX & SWT 4
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
L java.lang.NullPointerException - Fehlermeldung AWT, Swing, JavaFX & SWT 2
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
D NullPointerException observableList AWT, Swing, JavaFX & SWT 4
J NullPointerException bei getText() AWT, Swing, JavaFX & SWT 3
S JavaFX NullPointerException bei Versuch ImageView zu ändern AWT, Swing, JavaFX & SWT 1
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
S Swing [CLOSED] NullPointerException bei BorderLayout() AWT, Swing, JavaFX & SWT 8
G Swing NullPointerException und JXImageView AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
K JavaFX Pfad öffen NullPointerException AWT, Swing, JavaFX & SWT 4
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
J JTable verursacht NullPointerException.Ratlos. AWT, Swing, JavaFX & SWT 5
C JButton NullPointerException AWT, Swing, JavaFX & SWT 2
Q getGraphics() - NullPointerException AWT, Swing, JavaFX & SWT 8
C NullPointerException im MVC Muster AWT, Swing, JavaFX & SWT 9
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
C Swing NullPointerException beim Hinzufügen von Checkboxes in eine ArrayList AWT, Swing, JavaFX & SWT 5
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
B Swing NullPointerException bei actionPerformed() AWT, Swing, JavaFX & SWT 2
E java.lang.NullPointerException AWT, Swing, JavaFX & SWT 14
R NullPointerException AWT, Swing, JavaFX & SWT 16
xehpuk Swing NullPointerException: Random-Instanz anfangs nicht initialisiert AWT, Swing, JavaFX & SWT 4
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
C SWT NullPointerException AWT, Swing, JavaFX & SWT 12
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben