Newsgroup: it.comp.java
Titolo: DISPERATO !

Salve ragazzi, vi chiedo cortesemente una mano ed un pò di pazienza..
ho compilato ed eseguito su una macchina linux i file Pop3.java e
TestPop3.java ma il processo quando eseguo TestPop3 si blocca e mi
restituisce :
[root@localhost bin]# ./java TestPop3
Exception in thread "main" java.lang.NullPointerException
        at Pop3.sendCommand(Pop3.java:103)
        at Pop3.sendCommand(Pop3.java:89)
        at Pop3.<init>(Pop3.java:54)
        at Pop3.<init>(Pop3.java:35)
        at TestPop3.main(TestPop3.java:16)
..che dovrebbe significare che nel programma ci si riferisce da qualche
parte a "null" mentre è richiesto un oggetto !!!
Di seguito vi riporto le classi Pop3.java e TestPop3.java , vi prego di
dare un' occhiata.. anche se io non riesco ad uscirmene, non credo sia
una cosa tanto difficile per qualcuno che ha più esperienza di me !
Non so a chi altri rivolgermi.. spero in un vostro aiuto !
Grazie!
PS: è possibile che l' errore sia nella riga iniziale  della classe
TestPop3.java :   import Pop3;   ?!
(Sia i file necessari per la compilazione e l' esecuzione del programma
che la classi Pop3 e TestPop3 sono nella stessa deirectory.)
*************************************************************************************************
/* Pop3.java - classe Post Office Protocol versione 3 */
            import java.net.*;
            import java.io.*;
            import java.util.*;
            public class Pop3 {
              /* dal server */
              protected BufferedReader in;
              /* al server */
              protected PrintWriter out;
              /* per scrivere il messaggio ad un file */
              protected PrintWriter outFile;
              /* il socket da usare per questa connessione */
              protected Socket socket;
              /**
               * Connessione al server.
               * @param user è l' username
               * @param password è la password per questo utente
               * @param server è il server a cui connettersi
               * @param box è il file dove scaricare il messaggio
               */
              public Pop3(String user, String password, String server,
String box) throws IOException {
                this(user, password, server, box, 110);
              }
              /**
               * Connessione al server.
               * @param user è l' username
               * @param password è la password per questo utente
               * @param server è il server a cui connettersi
               * @param box è il file dove scaricare il messaggio
               * @param port è l porta da usare
               */
              public Pop3(String user, String password, String server,
String box, int port) throws IOException {
                socket = new Socket(server, port);
                in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream())), true);
                outFile = new PrintWriter(new BufferedOutputStream(new
FileOutputStream(box, true)));
                in.readLine();
                sendCommand("USER " + user);
                sendCommand("PASS " + password);
              }
              /* uscire dal server */
              public void closeConnection() throws IOException {
                sendCommand("QUIT");
                in.close();
                out.close();
                outFile.close();
                socket.close();
              }
              /* per sapere il numero di messaggi per l'utente */
              public int getMessageCount() throws IOException {
                sendCommand("STAT", false);
                int messages = 0;
                int i = 1;
                String answer = in.readLine();
                StringTokenizer tok = new StringTokenizer(answer);
                if("-err".equalsIgnoreCase(tok.nextToken())) throw new
IOException(answer);
                else {
                  try { messages =
Integer.parseInt(tok.nextToken().trim()); } // how to make a string into
an int
                  catch (Exception e) { messages = -1; }
                }
                return messages;
              }
             /* manda un messaggio al server
              * @param command è il comando da mandare
              */
              protected void sendCommand(String command) throws
IOException {
                sendCommand(command, true);
              }
              /*
               * manda un messaggio al server
               * @param command è il comando da mandare
               * @param showAnswer If it should get the answer or not
               */
              protected void sendCommand(String command, boolean
showAnswer) throws IOException {
                out.println(command);
                if(showAnswer == true) {
                  String answer = in.readLine();
                  if(answer.toLowerCase().startsWith("-err")) throw new
IOException(answer);
                }
              }
              /*
               * prende il messaggio specificato dal server
               * @param msg è il messaggio da prendere
               */
              public boolean getMessage(int msg) throws IOException {
                sendCommand("RETR " + msg, false);
                String answer = in.readLine();
                if(!answer.toLowerCase().startsWith("-err")) {
                  while(!".".equals(answer)) {
                    answer = in.readLine();
                    outFile.println(answer);
                  }
                  return true;
                }
                return false;
              }
              /**
               * cancella il messaggio specificato dal server
               * @param msg è il messaggio da cancellare
               */
              public void deleteMessage(int msg) throws IOException {
                sendCommand("DELE " + msg);
              }
            }
*************************************************************************************************
*************************************************************************************************
/* classe Post Office Protocol versione 3 */
              import  Pop3;
              import java.io.IOException;
              public class TestPop3 {
                public static void main(String args[]) {
                  try {
                  /* connessione al server '
netgate.maret.org
'
                   * con username 'guest' and password 'guest'
                   * i messaggi saranno salvati in '/inbox'
                   */
                    Pop3 pop = new Pop3("Mariux", "jvhi239zen1",
"151.15.196.222", "/inbox");
                    /* legge il numero di messaggi sul server */
                    int messages = pop.getMessageCount();
                    for(int j = 1; j <= messages ; j++) {
                      /* prende il messaggio */
                      pop.getMessage(j);
                      /* cancella il messaggio */
                      pop.deleteMessage(j);
                    }
                    /* uscita dal server */
                    pop.closeConnection();
                  }
                  catch (IOException ioe) { System.err.println(ioe); }
                }
              }
****************************************************************************************************

 
Se posti i sorgenti cosi' rimarrai disperato per un bel po. E' impossibile 
capire le linee. Le eccezioni le vedo tutte generate da commenti e linee 
vuote.

 IOException(answer);
č molto probabile che la linea riportata dal server pop sia null, per
cui null.toLowerCase().startsWith("-err") ovviamente tira fuori
l'eccezione di cui sopra.
Prova a correggere con
if(answer != null && answer.toLowerCase().startsWith("-err")) throw
new...
Ciao,
	Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------