Avatar
Acerik
Redaktor
Avatar
Acerik:

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. května 23:04
Praxe na IT škole? Obrábění kovů for the win
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:

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  +1 29. května 23:20
'long long long' is too long for GCC
Avatar
mara
Člen
Avatar
Odpovídá na B42P6
mara:

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

Nahoru Odpovědět 29. května 23:30
Co na srdci, to na Facebooku
Avatar
Acerik
Redaktor
Avatar
Acerik:

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. května 9:56
Praxe na IT škole? Obrábění kovů for the win
Avatar
Odpovídá na Acerik
Petr Štechmüller:

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. května 10:35
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:

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

Nahoru Odpovědět 30. května 10:38
'long long long' is too long for GCC
Avatar
Acerik
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Acerik:

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

Nahoru Odpovědět 30. května 10:38
Praxe na IT škole? Obrábění kovů for the win
Avatar
Acerik
Redaktor
Avatar
Odpovídá na B42P6
Acerik:

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. května 10:41
Praxe na IT škole? Obrábění kovů for the win
Avatar
Odpovídá na Acerik
Petr Štechmüller:

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

Nahoru Odpovědět 30. května 10:42
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Acerik
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Acerik:

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. května 10:44
Praxe na IT škole? Obrábění kovů for the win
Avatar
B42P6
Člen
Avatar
Odpovídá na Acerik
B42P6:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 30. května 10:47
'long long long' is too long for GCC
Avatar
Petr Štechmüller:

Jo, to máš pravdu :D

Nahoru Odpovědět 30. května 10:59
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Acerik
Redaktor
Avatar
Acerik:

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. května 11:03
Praxe na IT škole? Obrábění kovů for the win
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.