Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [EXCEPTION]Gestione delle eccezioni

    salve ho un problema nel gestire le eccezione IOException ovvero java inizia a dare i numeri nel senso che in qualsiasi modo io metta il codice che potrebbe generare l'errore mi dice che non sto gestendo l'eccezione...
    questo è il mio codice e l'errore me lo da nella parte in grassetto
    codice:
        public void run() {
        	
        	ServerSocket s = new ServerSocket(6502);
        	
            do {
                Socket socket = s.accept();
                try {
                    new ServeOneClient(socket);
                 }
                catch (IOException e) {
                    socket.close();
                }
            } while (true);
            
            s.close();
    
        }
    io avevo provato a mettere prima del do un try e nel catch mettere s.close() ma continua a dirmi ke l'eccezione non è gestita -.-
    help mi dite qual è la maniera giusta? perkè sto sklerando visto ke non mi accetta nessuno dei miei tentativi -.-
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4
    il socket.close() puo' lanciare exception..
    prova così..

    public void run() {

    ServerSocket s = new ServerSocket(6502);

    do {
    Socket socket = s.accept();
    try {
    new ServeOneClient(socket);
    }
    catch (IOException e) {
    try{
    socket.close();
    }catch(IOException ex){
    System.out.println("errore nella chiusura del socket",ex);
    }
    }
    } while (true);

    s.close();

    }

  3. #3
    nada mi da sempre gli stessi errori
    ora te li spiego
    il codice è questo
    codice:
    public void run() {
    
    ServerSocket s = new ServerSocket(6502); 
    
    do {
    Socket socket = s.accept();
    try {
    new ServeOneClient(socket);
    }
    catch (IOException e) {
    try{ 
    socket.close();
    }catch(IOException ex){
    System.out.println("errore nella chiusura del socket" + ex);
    }
    }
    } while (true);
    
    s.close() ;
    
    }
    allora
    nel codice in rosso mi da questo errore: unhandled exception type IOException
    nel codice in verde mi da questo errore: unhandled exception type IOException
    nel codice in blu mi da questo errore: Unreachable code
    come si fa?

  4. #4
    Prova cosi. devi mettere il codice che ti da errore dentro il try catch, invece come facevi tu mettevi solo la ServeOneClient.

    Per quanto riguarda s.close() è un codice che non verrà mai eseguito perché sei in un while(true) da cui non uscirai mai, per cui il tuo programma non ha modo di finire.
    Devi dare una condizione uscita dal while per eseguire quel codice. Oppure, dato che questo server credo che di avere capito che sia un thread, potresti fare in modo che il main che chiama questo thread lo interrompa, mentre il thread server cattura InterruptedException eseguendo in quella situazione la chiusura del socket.

    Non so se sono stato molto chiaro. cmq il codice per le eccezioni è qui sotto.

    codice:
    public void run() {
    
    try {
      ServerSocket s = new ServerSocket(6502); 
    }catch(IOException e) {
      System.out.println("errore creazione socket");
    }
    
    do {
    try {
      Socket socket = s.accept();
      new ServeOneClient(socket);
    }
    catch (IOException e) {
      try{ 
        socket.close();
      }catch(IOException ex){
        System.out.println("errore nella chiusura del socket" + ex);
      }
    }
    } while (true);
    
    }

  5. #5
    Da sempre errori perkè socket e s l'hai dikiarati all'interno di un blocco try e quindi catch non lo vede.. provo a dikiarle al di fuori del metodo run a questo punto
    vediamo

  6. #6
    alla fine ho risolto così..
    codice:
    /**
     * 
     */
    package gccb;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * @(#)CCServer.java
     *
     *
     * @author Raffaella 
     * @version 1.00 2007/4/24
     */
    
    public class CCServer extends Thread {
    
    	ServerSocket s;
    	Socket socket;
    	public static final int PORT = 6502;
    
    	public CCServer() {
            start();
        }
    
        public void run() {
        	try{
        		s = new ServerSocket(6502);
        	}
            catch (IOException e) {
            	try{
            		s.close();
            	}
                catch (IOException ex) {
                	System.err.print("err");
                }
            }
            do {
            	try{
                socket = s.accept();
            	}
                catch (IOException e) {
                	try{
                        socket.close();
                    }
                    catch (IOException ex) {
                        System.err.print("err");
                    }
                }
                try {
                    new ServeOneClient(socket);
                 }
                catch (IOException e) {
                	try{
                        socket.close();
                    }
                    catch (IOException ex) {
                        System.err.print("err");
                    }
                }
            } while (true);
        }
    }
    ma se volessi mettere la dikiarazione dei socket nel metodo run come devo fare per non avere inizializzazioni e di eccezioni IO?
    anke perkè se li mettessi in un blocco try la dikiarazione poi è locale al try... e invece no deve essere visibile a tutto il metodo run()
    se lo dikiaro solo mi da errore perkè giustamente la devo dikiarare se la diakiaro mi dice ke devo gestire IOexception.. -.- come faccio?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Modo banale:
    codice:
    public void run() {
      try {
      //tutto il codice del metodo
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    oppure :

    codice:
    public void run() {
    //Dichiarazioni delle variabili
      try {
      //tutto il codice del metodo che sfrutta quelle variabili
      }
      catch (Exception e) {
        e.printStackTrace();
      }
      //se vuoi altro codice
    }

  9. #9
    usa gli ultimi consigli. Con il tuo codice, benché compili, prova a pensare che succede con una IOException: chiudi la socket ma non esci dal ciclo. Risultato: un loop infinito su una socket chiusa!
    Invece, con un try/catch che racchiude tutto, in presenza di una eccezione esci (correttamente) dal ciclo...
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  10. #10
    grazie mille a tutti voi

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.