Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    4

    [Java] Attesa di una scelta da JComboBox

    Ciao a tutti,
    sono nuovo e sperando di non ripetermi nella domanda (non ne ho trovate di simili) vi spiego qual'è il mio problema.
    Sto realizzando un'applicazione client-server. Il server, ovviamente, ha tutto quello che riguarda l'algoritmo che sto implementando (KMeans - Clustering). Il Client quindi si connette al server in modo tale da passargli una Tabella e un K (K = numero di cluster desiderato), il tutto attraverso una JApplet.
    Ho pensato di impostarla in questa maniera:
    -non appena il client si connette al server, quest'ultimo gli invia le tabelle contenuto all'interno del suo DB in modo da evitare in assoluto errori da parte del Client.
    -il passo successivo consiste nell'inviare al server la tabella scelta e quest'ultimo gli invia il numero di K che l'utente può scegliere.

    Il problema sta proprio nel secondo punto. Questa lista di tabelle inviate dal server sono visualizzate nella JApplet (in particolare in una JComboBox). Quello che io voglio è che non appena scelgo un nome dalla JComboBox questa deve essere inviata al server.
    Ma come fare questo mentre il programma è in esecuzione?

    codice:
    private void learningFromDBAction() {
    		
    			try {//Primo
    				this.addr = InetAddress.getByName("127.0.0.1");
    				this.socket = new Socket(addr,5678);
    				this.panelDB.textArea.setText("socket " + socket + "\n");
    				this.out = new ObjectOutputStream(this.socket.getOutputStream());
    				this.in = new ObjectInputStream(this.socket.getInputStream());
               
    			out.writeObject(1);//Opzione di scelta
    			
    			try {
    			String nameT = (String)in.readObject();
    			String [] temp = null;
    			
    			if(nameT.equals(""))
    				this.panelDB.textArea.setText(this.panelDB.textArea.getText() + "Nessuna tabella nel DB. Riprovare più tardi!");
    			else {
    			temp = nameT.split("_");
    			}
    			
    			for(int i=0; i<temp.length; i++)
    				this.panelDB.comboBox.addItem(temp[i]);
    		    
    			this.panelDB.textArea.setText(this.panelDB.textArea.getText() + "Scegliere una tabella tra quelle disponibili.");
    			
    			
    			this.panelDB.comboBox.addItemListener(new ItemListener(){
    			public void itemStateChanged(ItemEvent e){
    				if(e.getStateChange()==ItemEvent.SELECTED) {
    				   name =(String) e.getItem();
    				}
    			}
    		});
    			
    			
    			System.out.println(name);
    			
    		
    			
    			}
    			catch (ClassNotFoundException e){
    				
    			}
    			
    			
    			
    			
    			}
    			catch (UnknownHostException e){
                       this.panelDB.textArea.setText("Host sconosciuto.");
    			}
    			catch(IOException e){
    				  this.panelDB.textArea.setText("Errore di I/O");
                }
    
    
    
    
    
    		}
    Faccio notare che la scelta dell'elemento da JComboBox la fa correttamente...solo che è come se dovessi Aspettare che l'utente faccia la scelta prima di procede col flusso di esecuzione. Come fare questo quindi?

    Grazie anticipatamente per la risposta (mi scuso per l'esser stato prolisso).

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    4
    Ho individuato in parte il problema:

    codice:
    comboBox.addActionListener(new java.awt.event.ActionListener(){
    					public void actionPerformed(ActionEvent ie){
    						name = (String)comboBox.getSelectedItem();
    						if((name.equals(" "))==false){
    							try {
    								out.writeObject(name);
    								}
    							catch(IOException e1){
    
    							}
    						}
    					}
    				});
    Faccio notare che invia correttamente il nome scelto dalla comboBox al server ma si aspetta che all'interno di quel try catch riceva la risposta dal server. Per esigenze personali, però, la ricezione deve avvenire fuori dal blocco di codice sopra scritto.

    codice:
    Integer k = (Integer)in.readObject();
    Se faccio questo il Client si blocca. Se faccio però la stessa operazione all'interno del try-catch va in esecuzione normalmente. Quindi, come faccio a fare quell'out (invio al server) senza che lui poi si aspetti la ricezione?

    Grazie ancora.

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.