Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Relais
    Registrato dal
    Sep 2011
    Messaggi
    19

    Problema con Ricerca in tabella

    Ciao a tutti, scusate se disturbo ma ho un esame e ho un problema che non riesco a capire e quindi a risolverlo... mi serve un urgente aiuto!!

    Praticamente sto implementando la classe che dovrebbe cercare una stringa (una parola insomma) all'interno della tabella solo che non mi funziona per un errore che non capisco! Mi da un errore del tipo NullPointerException su due righe di codice ora vi mostro:

    codice:
    public class SearchWordTable extends JPanel implements ActionListener{
    	private JTextField search = null;
    	private Archivio<Risultati> ris;
    	private int [] id ;
    	private int cont = 0;
    	private ErrorDialog dialog;
    	private JTable tab;
    	
    	public SearchWordTable (JTextField searchTable, Archivio<Risultati> archivio, JTable tab) {
    		super();
    		setLayout(new BorderLayout());
    		search = searchTable;
    		ris = archivio;
    		this.tab = tab;
    		
    	}
    	
    	private void searchWord(String text) {
    		for (int i=0; i<ris.vecLength(); i++) {
    			Risultati p = ris.getElement(i);
    			if (p.getIdString().contains(text) 
    			|| p.getNomeFile().contains(text) 
    			|| p.getStringaTrovata().contains(text)
    			|| p.getStringaRimpiazzata().contains(text)
    			|| p.getPositionString().contains(text)) {
    				id[cont] = p.getId(); 
    				cont++;
    			}
    		}
    		cont = 0;
    	}
    	
    	private void showDialog() {
    		
    		if (id.length == 0) 
    			dialog = new ErrorDialog("Non è stata trovata nessuna corrispondenza!!!");
    		else {
    			dialog = new ErrorDialog("Sono state trovate "+id.length+" corrispondenze");
    			evidenziaRiga(id[0]);
    		}
    	}
    	
    	private void evidenziaRiga(int i) {
    		tab.setRowSelectionInterval(i, i);
    	}
    	
    	/**
    	 * 
    	 * @param r
    	 */
    	public void setArchivio(Archivio<Risultati> r) {
    		ris = r;
    	}
    	
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		String text = search.getText();
    		searchWord(text); 
    		showDialog();
    		evidenziaRiga(1);
    	}
    }
    L'errore è questo:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at SearchWordTable.searchWord(SearchWordTable.java:35)
    	at SearchWordTable.actionPerformed(SearchWordTable.java:68)
    	at javax.swing.JTextField.fireActionPerformed(Unknown Source)
    	at javax.swing.JTextField.postActionEvent(Unknown Source)
    	at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
    	at javax.swing.SwingUtilities.notifyAction(Unknown Source)
    	at javax.swing.JComponent.processKeyBinding(Unknown Source)
    	at javax.swing.JComponent.processKeyBindings(Unknown Source)
    	at javax.swing.JComponent.processKeyEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
    	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Le righe di codice che punta l'errore sono indicate in rosso nel codice, non capisco come mai il vettore di interi non dovrebbe puntare a niente ! Heeeeeelp

  2. #2
    L'errore potrebbe essere qui....
    Magari uno di questi valori è null (e fai lo stesso il controllo) il sistema ti ritorna l'errore.

    codice:
    if (p.getIdString().contains(text) 
    	|| p.getNomeFile().contains(text) 
    	|| p.getStringaTrovata().contains(text)
    	|| p.getStringaRimpiazzata().contains(text)
    	|| p.getPositionString().contains(text)) {
    prova a mettere solo
    codice:
    if (p.getIdString().contains(text)){
          id[cont] = p.getId(); 
          cont++;
    }
    assicurandoti che non sia null e vedi se anche così ti dà errore.

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di Relais
    Registrato dal
    Sep 2011
    Messaggi
    19
    Ho provato ma da lo stesso errore, ma non dovrebbe essere vuoto perchè gli passo un oggetto di tipo archivio non nullo, cioè se noti anche c'è un metodo che setta l'oggetto Archivio che lo chiamo quando premo un bottone e dovrebbe settarlo con un oggetto esistente.

  4. #4
    Riguardando meglio ho capito l'errore.

    Manca l'inizializzazione dell'array di int.
    Devi dirgli di quante posizioni è composto questo vettore.
    Altrimenti usi un Vector o una List (LinkedList etc etc)
    codice:
    private void searchWord(String text) {
           id=new int[posizioni];
    	for (int i=0; i<ris.vecLength(); i++) {
    		Risultati p = ris.getElement(i);
    		if (p.getIdString().contains(text) 
    		|| p.getNomeFile().contains(text) 
    		|| p.getStringaTrovata().contains(text)
    		|| p.getStringaRimpiazzata().contains(text)
    		|| p.getPositionString().contains(text)) {
    			id[cont] = p.getId(); 
    			cont++;
    		}
    	}
    	cont = 0;
    }
    dove posizioni è la variabile intera che ti dice di quante posizioni deve essere l'array.

    Se proprio vuoi usare l'array, invece di una list, puoi fare così

    codice:
    private void searchWord(String text) {
            cont = 0;
    	for (int i=0; i<ris.vecLength(); i++) {
    		Risultati p = ris.getElement(i);
    		if (p.getIdString().contains(text) 
    		|| p.getNomeFile().contains(text) 
    		|| p.getStringaTrovata().contains(text)
    		|| p.getStringaRimpiazzata().contains(text)
    		|| p.getPositionString().contains(text)) {
    			cont++;
    		}
    	}
    	
            id=new int[cont];
            cont = 0;
            for (int i=0; i<ris.vecLength(); i++) {
    		Risultati p = ris.getElement(i);
    		if (p.getIdString().contains(text) 
    		|| p.getNomeFile().contains(text) 
    		|| p.getStringaTrovata().contains(text)
    		|| p.getStringaRimpiazzata().contains(text)
    		|| p.getPositionString().contains(text)) {
    			id[cont] = p.getId(); 
    			cont++;
    		}
    	}
    }

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    In quel codice non vedo da nessuna parte l'inizializzazione dell'array id... vedo solo la sua dichiarazione:

    codice:
    private int [] id;
    Ma da nessuna parte trovo scritto qualcosa del tipo

    codice:
    id = new int[ dimensione ];
    Di conseguenza, quell'array è probabilmente nullo (mai inizializzato, mai dimensionato).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di Relais
    Registrato dal
    Sep 2011
    Messaggi
    19
    Grazie a tutti per la risposta! A volte mi stupisco che possa fare ancora errori del genere e non capirli nemmeno

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.