Wyświetlanie listy na podstawie tablicy z pliku.

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();
					
				}
			});
		}
		
	}
 
0

Tablica jest nie zainicjowana.

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

0

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

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