Wyświetlanie listy na podstawie tablicy z pliku.

2013-10-09 11:32

Rejestracja: 6 lat temu

Ostatnio: 1 rok temu

0

Nie wyświetla się w ogóle okno, po czym dostaję komunikat wystąpił wyjątek w wątku FindWindow.

package marcin;

import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class FindWindow implements ListSelectionListener{

    JList<String> jlistOfPeople;
    JTextField jtfPerson;
    JLabel jlab;
    String[] jpeople;
    JScrollPane jscroll;

    public void readDB(){
        int i=0;
        try {
            Scanner sc = new Scanner(new File("//home//marcin//workspace//BazaOsob//Osoby.txt"));
            while(sc.hasNext()){
                jpeople[i] = sc.nextLine();
                i++;

            }
            sc.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    FindWindow(){
        JFrame jfrmFindWindow = new JFrame("Znajdź osobę");
        jfrmFindWindow.setLayout(new FlowLayout());
        jfrmFindWindow.setSize(150, 250);
        readDB();
        //Tworzenie listy
        jlistOfPeople = new JList<String>(jpeople);
        jlistOfPeople.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //pojedyncze zaznaczenie
        //pasek przewijania
        jscroll = new JScrollPane(jlistOfPeople);

        jfrmFindWindow.setVisible(true);
        //sluchacz
        jlistOfPeople.addListSelectionListener(this);
    }

    @Override
    public void valueChanged(ListSelectionEvent le) {
        // TODO Auto-generated method stub

    }
}

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at giecmarcin.FindWindow.readDB(FindWindow.java:24)
    at giecmarcin.FindWindow.<init>(FindWindow.java:38)
    at giecmarcin.SWindow$3.run(SWindow.java:73)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:688)
    at java.awt.EventQueue$3.run(EventQueue.java:686)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getActionCommand().equals("Dodaj osobę")){
            //Tworzy ramkę w watku rodzialu zdarzen
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    new EditionWindow();

                }
            });

        }
        else if(e.getActionCommand().equals("Usuń osobę")){

        }
        else if(e.getActionCommand().equals("Pokaż osoby")){
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    new ShowWindow();

                }
            });

        }
        else if(e.getActionCommand().equals("Znajdź osobę")){
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    new FindWindow();

                }
            });
        }

    }

Pozostało 580 znaków

garai_nz
2013-10-09 12:09
garai_nz
0

Tablica jest nie zainicjowana.

Pozostało 580 znaków

2013-10-09 15:50

Rejestracja: 6 lat temu

Ostatnio: 1 rok temu

0

Pytanie jak to poprawić ? Czy można podać jako argument jlist całą listę typu ArrayList()

String[] jpeople=null;

Tutaj wczytuję dane:

jpeople[i] = sc.nextLine();

więc powinna być zaincjalizowana.

dodanie znaczników <code class="java"> - fp

edytowany 1x, ostatnio: furious programming, 2013-10-09 16:57
Przypominam o wstawianiu kodu w znaczniki kolorujące składnię; - furious programming 2013-10-09 16:57

Pozostało 580 znaków

garai_nz
2013-10-09 18:21
garai_nz

Jeżeli nie znasz wielkości tablicy to zamiast niej użyj listy. Poza tym proponuję:

  1. robić zmienne prywatne a nie pakietowe
  2. użyć klas wewnętrznych a nie jednej metody actionPerformed z warunkami
  3. oddzielić gui od logiki
Konstruktor JList przyjmuje np. Vector. Więc zamiast tablicy użyj Vectora. <code=java> Vector <String> vec = new Vector<>(); </code> ... <code=java> vec.add(sc.nextLine()); </code> - garai 2013-10-09 18:58
W komentarzu znaczniki &lt;code&gt; nie są parsowane - odpowiedź napisz w poście, a kod zostanie pokolorowany ;) - furious programming 2013-10-09 19:20
Dzięki za info :) domyśliłem się po fakcie... - garai 2013-10-09 19:35
Swój komentarz możesz przecież usunąć - nie powinno się tego robić, jeśli są już pod nim kolejne komentarze; Ale jeśli jest to jedyny lub ostatni to czemu nie ;) - furious programming 2013-10-09 19:39
zostawilem w celach edukacyjnych, byc moze sie znajdzie ktos taki rozgarniety jak ja :) koniec tematu, bo chyba autor otrzymal swoja odpowiedz... - garai 2013-10-09 19:54

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0