|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
[Java]NullPointerException
Salve a tutti
Ho un problema in questa parte di codice. Sostanzialmente deve trasferire alcuni file (txt) , in modo random , da un Client ad un Server (sia esso runnato come LocalHost o da due pc). Una volta avviato il programma mi restituisce l'errore come da titolo: il prompt che fa da Server si blocca e il Client termina l'esecuzione in modo "corretto". I file che dovrebbero passare dal Client al Server sono però effettivamente passati , nonostante l'errore in questione si presenti nella write sul buffer. Ecco il codice: Codice:
private void upload()
{
//Dichiarazione delle variabili locali
ObjectInputStream ois = null;
FileOutputStream fos = null;
byte[] pacchetto = null;
//
for(i = 0; i < 10; i++)
{
try
{
ois = new ObjectInputStream(sock.getInputStream()); //Crea un oggetto dal flusso
fos = new FileOutputStream("Client.txt"); //Apertura di un flusso per il salvataggio del file
pacchetto = (byte[])(ois.readObject()); //Legge il flusso e scrive nel buffer
}
catch(ClassNotFoundException e7)
{
}
catch(IOException e)
{
System.out.println("IOex");
}
try
{
fos.write(pacchetto);
}
catch(IOException e)
{
}
}
try
{
ois.close(); //Chiusura dell'ObjectInputStream
fos.close(); //Chiusura del FileOutputStream
}
catch(IOException e10)
{
}
}
E' possibile bypassare l'errore e far continuare comunque l'esecuzione , visto che i file comunque arrivano , tutti interi? Grazie mille Saluti
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Riordinando un po' le cose il caso "NPE" dovrebbe sparire:
Codice:
private void upload() {
//Dichiarazione delle variabili locali
ObjectInputStream ois = null;
FileOutputStream fos = null;
byte[] pacchetto = null;
//
for (i = 0; i < 10; i++) {
try {
ois = new ObjectInputStream(sock.getInputStream()); //Crea un oggetto dal flusso
fos = new FileOutputStream("Client.txt"); //Apertura di un flusso per il salvataggio del file
pacchetto = (byte[]) (ois.readObject()); //Legge il flusso e scrive nel buffer
fos.write(pacchetto);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try { close(ois); } finally { close(fos); }
}
}
}
private void close(Closeable c) {
try {
if(c != null) {
c.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
pacchetto = (byte[]) (ois.readObject()); |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Grazie , proveremo
__________________
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
Allora , continua a dare quell'errore.
Mi sono dimenticato di postare anche la Run del Thread Server. Il problema si presenta all'interno della Switch (dove si nota la presenza della funzione UPLOAD descritta nel mio primo post). Dopo aver eseguito il metodo Upload il Server continua a ciclare senza eseguire le istruzioni nella try (indicata in grassetto). Quando invece esegue uno degli altri due metodi indicati nello Switch , tutto funziona correttamente (entra nella try indicata sotto ed esegue). Codice:
public void run()
{
//si attende l'inizio della simulazione
try
{
this.signal.await();
}
catch(InterruptedException e)
{
}
//creazione della ServerSocket e del rapporto relativo alla porta del server
try
{
SSocket = new ServerSocket(porta);
createInfoDoor();
System.out.println(this.getName() + ": in ascolto...");
}
catch(IOException e)
{
System.out.println(this.getName() + ": Impossibile creare la ServerSocket!");
}
//...
while(!endProgram)
{
try
{
pw.println("-In attesa di connessione con un Client...");
sock = SSocket.accept();
getIPClient();
pw.println("Connessione da parte del Client "+ sock + " riuscita");
System.out.println("Client "+ sock.getInetAddress() + " connesso a " + this.getName());
}
catch(IOException e)
{
pw.println("ERRORE: Impossibile stabilire la connessione con il Client!");
}
//instaurare il flusso in entrata e in uscita
try
{
//creazione canali di lettura e scrittura messaggi
streamIn = new InputStreamReader(sock.getInputStream());
streamOut = new OutputStreamWriter(sock.getOutputStream());
//creazione buffer di supporto per lettura e scrittura
bufIn = new BufferedReader(streamIn);
bufOut = new BufferedWriter(streamOut);
printBuf = new PrintWriter(bufOut, true);
pw.println("Flussi per gli scambi di informazioni stabiliti");
}
catch(IOException e)
{
pw.println("ERRORE! Flussi per gli scambi di informazioni non stabiliti!");
}
do
{
scelta = 0;
//acquisizione della scelta del Client
try
{
choise = bufIn.readLine();
scelta = Integer.parseInt(choise);
endConnection = false;
}
catch(IOException e)
{
//endConnection = true;
}
//esecuzione dell'operazione scelta
switch(scelta)
{
case 1:
chat();
break;
case 2:
upload();
break;
case 3:
endConnection = true;
break;
default:
System.out.println("c***o!");
break;
}
}
while(!endConnection);
System.out.println("Client "+ sock.getInetAddress() + " disconnesso da " + this.getName());
//chiudere le connessioni con il Client
try
{
streamIn.close();
streamOut.close();
printBuf.close();
sock.close();
}
catch(IOException e)
{
}
}
//chiudere la ServerSocket ed il rapporto
try
{
fw.close();
pw.close();
SSocket.close();
}
catch(IOException e)
{
}
System.out.println(this.getName() + ": Ho terminato!");
}
__________________
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
L'eccezione a che linea di codice fa riferimento?
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2007
Città: Senigallia(AN)
Messaggi: 2069
|
L'eccezione fa riferimento al metodo UPLOAD(primo post) , nella riga
Codice:
fos.write(pacchetto); (Inspiegabile?
__________________
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Prova con un debugger a vedere se "pacchetto" è null. Dovrebbe perchè in quella linea fis è null solo se si verifica un'eccezione di IO che però viene catturata saltanto pacchetto.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:06.



















