[Java] CardLayout geeft nullpointer exception bij show

Pagina: 1
Acties:
  • 44 views sinds 30-01-2008

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik heb het scherm onderverdeeld in drie JPanels, die weer JPanels bevatten mocht dat nodig zijn. Het rechter JPanel, daar wil ik een CardLayout gebruiken omdat ik dan verschillende dingen daar kan laten zien op een gemakkelijke manier zonder gelijk tabjes te gebruiken. Ik ben zover gekomen. Het cardlayout gedeelte is een aanpassing van deze tutorial:

http://java.sun.com/docs/...1dot4/CardLayoutDemo.java

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package sudswing;//ik moet *alles* in een package gooien, ook nog zoiets vreemds, classpath ingesteld as advertised

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CompacterGui extends JFrame implements ActionListener {

    JButton knop1, knop2, knop3, hoi, hai, houdoe, zien;
    JTextArea messageArea;
    JPanel lp, cp, tp, bp, rpd, rpi, rp;
    final static String inventory = "Inventory View";
    final static String defaultview = "Default View";
    CardLayout cl = new CardLayout();

    CompacterGui() {
        JPanel lp = new JPanel();
        JPanel cp = new JPanel();
        JPanel tp = new JPanel();
        JPanel bp = new JPanel();
        JPanel rp = new JPanel(cl);
        JPanel rpd = new JPanel();
        JPanel rpi = new JPanel();
        JPanel messagePanel = new JPanel();
        JScrollPane messageScroll;

        lp.setSize(140,400);
        lp.setPreferredSize(new Dimension(140,400));
        rpd.setSize(140,400);
        rpd.setPreferredSize(new Dimension(140,400));
        rpi.setSize(140,400);
        rpi.setPreferredSize(new Dimension(140,400));
        cp.setSize(400,400);
        cp.setPreferredSize(new Dimension(400,400));
        tp.setSize(400,200);
        tp.setPreferredSize(new Dimension(400,200));
        bp.setSize(400,200);
        bp.setPreferredSize(new Dimension(400,200));

        Icon image = new ImageIcon("E:/studie/java/sudswing/suderia.jpg"); //.....en een absoluut pad naar het plaatje
        JLabel imageHolder = new JLabel(image);
        tp.add(imageHolder);
        tp.setBackground(Color.black);

        bp.setLayout(new BorderLayout());
        messagePanel.setBackground(Color.black);
        bp.add(messagePanel, BorderLayout.PAGE_START);
        messageArea = new JTextArea(8, 30);
        messageArea.setLineWrap(true);
        messageArea.setWrapStyleWord(true);
        messageArea.setMargin(new Insets(5,5,5,5));
        messageScroll = new JScrollPane(messageArea);
        bp.add(messageScroll, BorderLayout.CENTER);
        bp.setBackground(Color.black);

        cp.add(tp, BorderLayout.NORTH);
        cp.add(bp, BorderLayout.SOUTH);
        cp.setBackground(Color.black);

        JButton knop1 = new JButton("knop1");
        JButton knop2 = new JButton("knop2");
        JButton knop3 = new JButton("knop3");

        lp.add(knop1);
        lp.add(knop2);
        lp.add(knop3);
        lp.setBackground(Color.black);

        JButton hoi = new JButton("hoi");
        JButton hai = new JButton("hai");
        JButton houdoe = new JButton("houdoe");
        JButton zien = new JButton("zien");

        rpd.add(hoi);
        rpd.add(hai);
        rpd.add(houdoe);
        rpd.setBackground(Color.black);

        rpi.add(zien);

        rp.add(defaultview, rpd);
        rp.add(inventory, rpi);

        knop1.addActionListener(this);
        knop2.addActionListener(this);
        knop3.addActionListener(this);

        zien.addActionListener(this);

        Container c = getContentPane();
        c.add(lp, BorderLayout.WEST);
        c.add(cp, BorderLayout.CENTER);
        c.add(rp, BorderLayout.EAST);
        c.setBackground(Color.black);

        setTitle(" ");
        setLocation(100, 100);
        setSize(780, 400);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);

        messageArea.append("Eerste regel.");
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand() == "knop1") {
            messageArea.append("\nknop1");
            rpSwitchTo(inventory);
        }
        if (e.getActionCommand() == "knop2") {
            messageArea.append("\nknop2");
        }
        if (e.getActionCommand() == "knop3") {
            messageArea.append("\nknop3");
        }
    }

    public void rpSwitchTo(String goTo) {
        cl.show(rp, goTo);
    }
}


Als ik dit compileer gaat het goed, als ik het run en op knop1 klik, gebeurt het volgende:

code:
1
2
3
4
5
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.awt.CardLayout.show(CardLayout.java:504)
        at sudswing.CompacterGui.rpSwitchTo(CompacterGui.java:120)
        at sudswing.CompacterGui.actionPerformed(CompacterGui.java:109)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)


Ik mis net even dat kleine stukje volgens mij.....

iOS developer


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Ik heb hem al gevonden! :)
JPanel lp, cp, tp, bp, rpd, rpi, rp;
En binnen je Constructor:
JPanel rp = new JPanel(cl);
Oftewel je hebt twee variabelen rp. Eentje local binnen je constructor en eentje in je class. Oftewel, diegene die je binnen je class hebt zitten is nog niet geinitialiseerd. Probeer eens dat JPanel uit m'n tweede quote weg te halen...

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

lang moeten zoeken?
Volgende keer mag de TS wat mij betreft eerst zelf gaan debuggen. Je post nu een veel te grote lap code. Probeer eerst zelf eens te achterhalen waarom het eventueel zou kunnen misgaan en doe er wat mee. Zie ook P&W FAQ - Leer **** debuggen!!.
We gaan er vanuit dat je eerst zelf actief opzoek gaat naar een oplossing en dat je dat ook aangeeft in je strartpost. Zie ook P&W FAQ - De "quickstart"

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Dit topic is gesloten.