Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema Null Pointer ma solo in compilazione
Forum - Java - Problema Null Pointer ma solo in compilazione

Avatar
Goldeneye (Normal User)
Newbie


Messaggi: 2
Iscritto: 13/09/2010

Segnala al moderatore
Postato alle 18:00
Lunedì, 13/09/2010
Ciao a tutti :) mi sono appena iscritto al forum perchè ho decisamente un problema che non riesco a risolvere e spero che voi possiate aiutarmi :)
Il problema è il seguente:
Ho creato un programma in Java con l'utilizzo di Netbeans, il programma è completato e attraverso Netbeans funziona perfettamente, però, dopo averlo compilato e eseguito da Prompt di MSDOS mi da il seguente errore:

Codice sorgente - presumibilmente Delphi

  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  2. at Grafica.SimpleTableDemo.<init>(SimpleTableDemo.java:42)
  3. at Grafica.Finestra3.PadMouseClicked(Finestra3.java:192)
  4. at Grafica.Finestra3.access$400(Finestra3.java:34)
  5. at Grafica.Finestra3$5.mouseClicked(Finestra3.java:93)
  6. at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
  7. at java.awt.Component.processMouseEvent(Unknown Source)
  8. at javax.swing.JComponent.processMouseEvent(Unknown Source)
  9. at java.awt.Component.processEvent(Unknown Source)
  10. at java.awt.Container.processEvent(Unknown Source)
  11. at java.awt.Component.dispatchEventImpl(Unknown Source)
  12. at java.awt.Container.dispatchEventImpl(Unknown Source)
  13. at java.awt.Component.dispatchEvent(Unknown Source)
  14. at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
  15. at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
  16. at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
  17. at java.awt.Container.dispatchEventImpl(Unknown Source)
  18. at java.awt.Window.dispatchEventImpl(Unknown Source)
  19. at java.awt.Component.dispatchEvent(Unknown Source)
  20. at java.awt.EventQueue.dispatchEvent(Unknown Source)
  21. at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
  22. at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
  23. at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  24. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  25. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  26. at java.awt.EventDispatchThread.run(Unknown Source)



Il pezzo di sorgente del programma "sotto accusa" è il seguente
Codice sorgente - presumibilmente Java

  1. > package Grafica;
  2. > import java.io.*;
  3. > import java.util.logging.Level;
  4. > import java.util.logging.Logger;
  5. >
  6. >
  7. > import javax.swing.JFrame;
  8. > import javax.swing.JPanel;
  9. > import javax.swing.JScrollPane;
  10. > import javax.swing.JTable;
  11. > import java.awt.Dimension;
  12. > import java.awt.GridLayout;
  13. > import java.awt.event.MouseAdapter;
  14. > import java.awt.event.MouseEvent;
  15. > import java.text.DateFormat;
  16. > import java.text.SimpleDateFormat;
  17. > import java.util.Date;
  18. > /**
  19. > *
  20. > * Finestra con Tabella elenco file e descrizione
  21. > */
  22. >
  23. > public class SimpleTableDemo extends JPanel {
  24. > private boolean DEBUG = false;
  25. > File di = new File("../Calcolatore2/");
  26. > File fl[] = di.listFiles();
  27. > String[] nomeFile;
  28. > String[] nomeEste;
  29. > int i, j;
  30. > int sottrai=0;
  31. > int con=0;
  32. > int count=0;
  33. > int[] dimen;
  34. > String str="";
  35. > String list="";
  36. > String[] dataModif;
  37. >
  38. > public SimpleTableDemo() {
  39. > super(new GridLayout(1,0));
  40. > nomeFile=new String[fl.length];  <--- Questa è la riga 42
  41. > nomeEste=new String[fl.length];
  42. > dimen= new int[fl.length];
  43. > dataModif= new String[fl.length];
  44. > DateFormat sdf = DateFormat.getDateInstance(DateFormat.SHORT);
  45. >
  46. > for (i=0; i < fl.length; i++){
  47. > nomeFile[con]="";
  48. > String nome="";
  49. > Boolean conto=false;
  50. > if (fl[i].length()!=0) {
  51. > for (j=16; j < fl[i].toString().length(); j++){
  52. > String car="";
  53. > car=car+fl[i].toString().charAt(j);
  54. > if(car.equals(".") && j!=16 ){
  55. > nome="";
  56. > conto=true;
  57. > }
  58. > nome=nome+car;
  59. > if (conto) nomeEste[con] = nome;
  60. > else nomeFile[con]=nome;
  61. > }
  62. > Date d = new Date(fl[i].lastModified());
  63. > dataModif[con]=sdf.format(d).toString();
  64. > dimen[con]=(int) fl[i].length();
  65. > con=con+1;
  66. > }
  67. >
  68. > }
  69. > ...



Parlando col mio prof dell'università mi ha detto che probabilmente l'errore è derivante da File fl[] = di.listFiles(); il quale potrebbe risultare Null
Mi ha suggerito di inizializzarlo nel costruttore e non nella dichiarazione ma non sono riuscito, qualcuno può aiutarmi? :)
Grazie

PM
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 19:39
Lunedì, 13/09/2010
Ciao!!
Allora il problema non è per colpa tua ma per cola di netbeans :yup::yup:
infatti quando avvii il programma da netbeans gli imposta un path di esecuzione diverso da quello che gli viene impostato quando viene avviato da riga di comando...

il mio consiglio sarebbe quello di utilizzare percorsi standard, come ad
esempio:
Codice sorgente - presumibilmente Plain Text

  1. System.getProperties("user.home");


così ottieni il path della cartella home dell'utente...
cmq se guardi la documentazione trovi tutto il resto:

http://download.oracle.com/javase/7/docs/api/java/lang/Sys ...

ciaociao!!

PM
Avatar
Goldeneye (Normal User)
Newbie


Messaggi: 2
Iscritto: 13/09/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:28
Lunedì, 13/09/2010
Ancora non ho risolto :d
Ho provato in due maniere seguendo il tuo consiglio, prima al posto di

Codice sorgente - presumibilmente Java

  1. File di = new File("../Calcolatore2/");



ho messo
Codice sorgente - presumibilmente Java

  1. File di = new File("C:/");



Ma non ha funzionato, allora ho provato con l'utilizzo del System:
Codice sorgente - presumibilmente Java

  1. String name =(String) System.getProperty("user.dir");
  2. File di = new File(name);



Anche con user.home il risultato è lo stesso.
Però continua a dare lo stesso errore, ovviamente solo in compilazione mentre su Netbeans gira che è una meraviglia.
Altri suggerimenti? :(

PM
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 21:00
Lunedì, 13/09/2010
Ciao!

Allora io ho provato con questo codice e funziona benissimo...
Codice sorgente - presumibilmente Java

  1. public static void main(String[] args) {
  2.         // TODO code application logic here
  3.         File f = new File("/home/edoardo/");
  4.         System.out.println(f.listFiles().length);
  5.     }



sicuro di non sbagliare qualcosa??

ciaociao!! :k::k::k:

PM