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

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

    Ciao, vorrei creare una semplicissima chat. Ho seguito una guida ma non riesco a capire dove è il problema:

    client:


    codice:
    package chat;    
    import java.net.*; 
    import java.io.*;   
    public class Client { 	
    private Socket connessione; 	
    private BufferedReader dalServer; 	
    private PrintStream alServer; 	
    private String name;   	
    public Client(String name) { 		
    this.name = name; 		
    BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
    try { 	System.out.println("Inserire indirizzo server: "); 	
    String indirizzo = t.readLine(); 		
    connessione = new Socket(indirizzo, 1000); 	
    dalServer = new BufferedReader(new InputStreamReader(connessione.getInputStream())); 			
    alServer = new PrintStream(connessione.getOutputStream()); 
    } catch(IOException e) { System.out.println(e); } 	}  	
    public void conversazione() { 		
    String messaggio = ""; 		
    BufferedReader t = new BufferedReader(new InputStreamReader(System.in)); 		
    try { 			
    while(!messaggio.equals("/logout")) { messaggio = alServer.readLine(); 				System.out.println(messaggio); 				
    if(!messaggio.equals("/logout")) { messaggio = t.readLine(); 					alServer.println(name+" scrive: "+messaggio); }	} 		
    connessione.close(); 
    } catch(IOException e) { System.out.println("Conversazione interrotta");} 	}
    server:

    codice:
    package chat;  
    import java.net.*; 
    import java.io.*;   
    public class Server { 	
    private ServerSocket server; 	
    private Socket connessione; 	
    private BufferedReader dalClient; 	
    private PrintStream alClient; 	
    private String name;   	
    public Server(String name) { this.name = name; 
    try { 			
    server = new ServerSocket(1000, 5); 
    System.out.println("Server attivo"); 
    connessione = server.accept(); 
    dalClient = new BufferedReader(newInputStreamReader(connessione.getInputStream())); 			alClient = new PrintStream(connessione.getOutputStream()); 
    } catch(IOException e) { System.out.println(e);} }   	
    public void conversazione() { 	String messaggio = ""; 
    BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
    try { 	
    alClient.println(" - Sei connesso al server! Digita /logout per effetuare la disconnessione."); 		
    while(!messaggio.equals("/logout")) { messaggio = dalClient.readLine(); 				System.out.println(messaggio); 	
    if(!messaggio.equals("/logout")) { 		
    messaggio = t.readLine(); 		
    alClient.println(name+" scrive: "+messaggio); 	} } 
    } catch(IOException e) { System.out.println("Conversazione interrotta"); 		} 	}  }
    ProvaServer:

    codice:
    package chat;  
    public class ProvaServer { 	
    public static void main(String[] args) {		Server s = new Server(args[0]); 		s.conversazione(); 	 }}
    Prova Client:

    codice:
     
    package chat;  
    public class ProvaClient {
    public static void main(String[] args) {Client c = new Client(args[0]); 		c.conversazione(); 	} }
    La guida diceva di eseguire il ProvaServer e poi il ProvaClient.
    Ma quando provo ad eseguirli mi dà l'errore:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

    Come lo posso risolvere?Grazie

  2. #2
    sia il client che il server prendono come parametro dalla command line il loro nome (args[0]), tu non glielo stai passando quindi la posizione 0 dell'array args non esiste, quindi viene generata una ArrayIndexOutOfBoundsException.
    o glielo passi o provi a sostituire args[0] con "client" sul client e con "server" sur server.

    La prossima volta indenta il codice quando lo posti.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Ciao, ho risolto togliendo il parametro di ingresso del server e del client.
    Ho due dubbi:
    1) nell'esercizio che io ho visto chattava tramite due finestre (tipo dos) invece a me apre due schede (uso netbenas) in basso che però limitano la visibilità.
    Come posso modificare la visualizzazione?

    2)Se volessi fare una chat uno a molti..Come modificare il mio sorgente?

    Grazie

  4. #4
    Nessuno mi sa aiutare soprattutto sul punto 2?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327

    Moderazione

    Originariamente inviato da francesca8080
    Nessuno mi sa aiutare soprattutto sul punto 2?
    Direi di no... non è una richiesta ammissibile: un conto è chiedere un consiglio su un problema specifico, un altro è chiedere a qualcuno come modificherebbe il tuo codice per fare un programma diverso... quest'ultima cosa è equivalente a chiedere di fare un lavoro (e va postato nel forum "Offro Lavoro / Collaborazione".

    Per il punto 1, semplicemente evita di eseguire da dentro NetBeans (oltretutto sei alle prime armi, evita proprio di usarlo NetBeans: farai solo tanta tantissima confusione), apri il prompt dei comandi ed esegui da lì.


    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
    1) probabilmente quando compili Netbeans genera un jar. vai da riga di comando nella directory del jar e fai java -cp tuojar chat.ProvaClient e parte il client. stessa cosa per il server

    2) se per uno a molti intendi che quando un client manda un messaggio tutti gli altri client (se ce ne sono) lo ricevono dovresti fare in modo che ogni connessione aperta dai client, una volta accettata dal server (con la accept per capirci) venga gestita da un thread diverso (a cui passerai la socket creata dalla chiamata ad accept). Fatta la accept e avviato un nuovo thread il server torna in accept e aspetta per nuove connessioni. In qualche modo poi quando uno dei thread che gestiscono i client riceve un messaggio, tale messaggio lo inoltri a tutti gli altri client attraverso i rispettivi thread.
    Per fare cio', devi sapere come funzionano le socket e relativi input ed output stream e come funziona la programmazione multithread.
    Prova a farlo e posta il codice (indentato!!!) e sicuramente ti potremo aiutare se c'e' qualcosa da sistemare.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  7. #7
    Direi di no... non è una richiesta ammissibile: un conto è chiedere un consiglio su un problema specifico, un altro è chiedere a qualcuno come modificherebbe il tuo codice per fare un programma diverso... quest'ultima cosa è equivalente a chiedere di fare un lavoro (e va postato nel forum "Offro Lavoro / Collaborazione".
    Non è così. Io chiedo come modificare il sorgente (da dove iniziare) ma non ho assolutamente la pretesa che qualcuno lo faccia al posto mio.Se mi sono espressa male chiedo venia.

    Per fare cio', devi sapere come funzionano le socket e relativi input ed output stream e come funziona la programmazione multithread.
    Forse mi conviene iniziare da qualcosa di banale.. Per esempio diversi thread che contano da 1 a 10 da 11 a 20 e così via.
    sai dove posso trovare qualche semplicissimo esempio per imparare?
    Ciao

  8. #8
    Originariamente inviato da francesca8080
    sai dove posso trovare qualche semplicissimo esempio per imparare?
    Ciao
    comincerei da qui: http://java.sun.com/docs/books/tutor...l/concurrency/
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  9. #9
    Ok, ho iniziato con qualcosa di semplice.
    Se ho dubbi inizio una nuova discussione visto che il problema è di natura differente.
    Grazie

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.