NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Pole JLabelů problém

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Acerik
Tvůrce
Avatar
Acerik:29.5.2016 23:04

Dobrý den mám problém chtěl sem udělat pole JLabelů abych je nemusel dělat ručně. Tady je kod a error je "Exception in thread "main" java.lang.NullPo­interException" a dole cesta k řádku s //tento
Děkuji za pomoc

public class Gui {
    private JLabel[] names;


    public Gui(JPanel panel){
        this.createGui(panel);
    }

    public void createGui(JPanel panel){
        int x = 0;
        int y = 0;
        for(int i = 0; i < 10;i++){
            names[i] = new JLabel(); //tento
            panel.add(names[i]);
            names[i].setSize(x, y);
            x += 10;
            y += 10;
            names[i].setText("Tento je: " + i);
            System.out.println(i);
        }
    }
}
Odpovědět
29.5.2016 23:04
“Every programmer is an author.”
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:29.5.2016 23:20

A nezabudol si inicializovať pole?

Buď priamo pri deklarácii:

private JLabel[] names = new JLabel[];

Alebo v konštruktóre:

names = new JLabel[];
Nahoru Odpovědět
29.5.2016 23:20
'long long long' is too long for GCC
Avatar
mara
Člen
Avatar
Odpovídá na B42P6
mara:29.5.2016 23:30

Ano, zapomněl na to.... :D

Nahoru Odpovědět
29.5.2016 23:30
Co na srdci, to na Facebooku
Avatar
Acerik
Tvůrce
Avatar
Acerik:30.5.2016 9:56

Děkuji ale i když sem to inicializoval tak mi to vždy hodí error na první řádek v cyklu. Zkoušel sem je i proházet ale stále na ten první..

public class Gui {
    private JLabel[] names;


    public Gui(JPanel panel){
        this.createGui(panel);
        names = new JLabel[10];
    }

    public void createGui(JPanel panel){
        int x = 0;
        int y = 0;
        for(int i = 0; i < 10;i++){
            names[i].setSize(x, y);
            x += 10;
            y += 10;
            names[i].setText("Tento je: " + i);
            System.out.println(i);
            panel.add(names[i]);
        }
    }
}
Nahoru Odpovědět
30.5.2016 9:56
“Every programmer is an author.”
Avatar
Odpovídá na Acerik
Petr Štechmüller:30.5.2016 10:35

Vždyť je ta chyba vidět z kódu.

public class Gui {
    private JLabel[] names;


    public Gui(JPanel panel){
        this.createGui(panel); // Tady voláš metodu, ve které přistupuješ do pole "names"
        names = new JLabel[10]; // Až tady inicializuješ to pole
    }

    public void createGui(JPanel panel){
        int x = 0;
        int y = 0;
        for(int i = 0; i < 10;i++){
            names[i].setSize(x, y); // Tady přistupuješ do neinicializovaného pole
            x += 10;
            y += 10;
            names[i].setText("Tento je: " + i);
            System.out.println(i);
            panel.add(names[i]);
        }
    }
}

Řešení: přehoď tyto řádky:

this.createGui(panel);
names = new JLabel[10];
Nahoru Odpovědět
30.5.2016 10:35
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:30.5.2016 10:38

Problem je tom, ze pole je inicializovane az po tom, ako je metoda createGui() volana, ktora to pole pouziva.

Nahoru Odpovědět
30.5.2016 10:38
'long long long' is too long for GCC
Avatar
Acerik
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Acerik:30.5.2016 10:38

Děkuji moc :D já sem občas fakt slepej a blbej
Díky

Nahoru Odpovědět
30.5.2016 10:38
“Every programmer is an author.”
Avatar
Acerik
Tvůrce
Avatar
Odpovídá na B42P6
Acerik:30.5.2016 10:41

Ovšem nyní jsem to teda přehodil, ale stále mi to ukazuje error na tom první řádku i když sem tam dal jiný takže sem se rozhodl že to asi napíšu sám a bude to jednoduší..

Nahoru Odpovědět
30.5.2016 10:41
“Every programmer is an author.”
Avatar
Odpovídá na Acerik
Petr Štechmüller:30.5.2016 10:42

A furt Ti to píše NullPointerEx­ception?

Nahoru Odpovědět
30.5.2016 10:42
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Acerik
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Acerik:30.5.2016 10:44

Ano.

public class Gui {
    private JLabel[] names;


    public Gui(JPanel panel){
        names = new JLabel[10];
        this.createGui(panel);
    }

    public void createGui(JPanel panel){
        int x = 0;
        int y = 0;
        for(int i = 0; i < 10;i++){
            names[i].setSize(10, 10);
            names[i].setLocation(x, y);
            x += 10;
            y += 10;
            names[i].setText("Tento je: " + i);
            System.out.println(i);
            panel.add(names[i]);
        }
    }
}

a error
Exception in thread "main" java.lang.NullPo­interException

Nahoru Odpovědět
30.5.2016 10:44
“Every programmer is an author.”
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:30.5.2016 10:47

No, proste debugging. Problem je (zase) v tom ze aj ked sice mas inicializovane pole objektov, samotne objekty v poli inicializovane niesu.

Proste prejdi to pole nejakym cyklom a inicializuj ich:

for (...)
...
names[i]=new JLabel();
...
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.5.2016 10:47
'long long long' is too long for GCC
Avatar
Petr Štechmüller:30.5.2016 10:59

Jo, to máš pravdu :D

Nahoru Odpovědět
30.5.2016 10:59
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Acerik
Tvůrce
Avatar
Acerik:30.5.2016 11:03

Díky toto už pomohlo takže nakonec to vypadá nějak takto.

public class Gui {
    private JLabel[] names;


    public Gui(JPanel panel){
        names = new JLabel[10];
        this.createGui(panel);
    }

    public void createGui(JPanel panel){
        int x = 0;
        int y = 0;
        for(int i = 0; i < 10;i++){
            names[i] = new JLabel();
            names[i].setSize(10, 10);
            names[i].setLocation(x, y);
            x += 10;
            y += 10;
            names[i].setText("Tento je: " + i);
            System.out.println(i);
            panel.add(names[i]);
        }
    }
}
Nahoru Odpovědět
30.5.2016 11:03
“Every programmer is an author.”
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.