Originariamente inviato da Brazonet
Non è che ho ben capito il tuo problema...
Ma se usi una JDialog invece della JFrame e blocchi l'utente sulla finestra che apre finché non finisce le sue operazioni?
Potresti postare, in caso, un po' di codice di questo listener per capire meglio?
Ecco qui il codice
Quest è il gui principale
codice:
public class GuiClientAmministrativo extends JFrame {
private final JLabel areaUp;
private final JPanel pannelloSopra;
private final JPanel pannelloSotto;
public final JButton primoTest;
public final JButton secondoTest;
public final JButton terzoTest;
public final JButton quartoTest;
public final JButton quintoTest;
public final JButton sestoTest;
public final JButton settimoTest;
public final JButton visualizzaClient;
public GuiClientAmministrativo(){
/**
* Creazione dell'oggetto Listener che si troverà in ascolto sugli 8 bottoni.
*/
ListenerTest azione=new ListenerTest();
ListenerPrimoTest testUno=new ListenerPrimoTest();
ListenerSecondoTest testDue=new ListenerSecondoTest();
/**
* Vado a creare il pannello principale
*/
this.setTitle("Client Amministrativo Di Controllo");
this.setSize(600,600);
this.setLocationRelativeTo(null);
final Container contentPane = this.getContentPane();
contentPane.setBackground(Color.WHITE);
primoTest = new JButton("Informazioni Pc");
primoTest.addActionListener(testUno);
primoTest.setActionCommand(testUno.PRIMOTEST);
secondoTest = new JButton("Test diVelocità di Trasmissione Dati Tcp");
secondoTest.addActionListener(testDue);
secondoTest.setActionCommand(testDue.SECONDOTEST);
terzoTest = new JButton("Test di Velocità di Trasmissione Dati Udp");
terzoTest.addActionListener(azione);
terzoTest.setActionCommand(azione.TERZOTEST);
quartoTest = new JButton("Test di Carico Distribuito");
quartoTest.addActionListener(azione);
quartoTest.setActionCommand(azione.QUARTOTEST);
quintoTest = new JButton("Test di Carico Centralizzato");
quintoTest.addActionListener(azione);
quintoTest.setActionCommand(azione.QUINTOTEST);
sestoTest = new JButton("Test di Carico ad Anello");
sestoTest.addActionListener(azione);
sestoTest.setActionCommand(azione.SESTOTEST);
settimoTest=new JButton("Test di Carico Ripetuti");
settimoTest.addActionListener(azione);
settimoTest.setActionCommand(azione.SETTIMOTEST);
visualizzaClient=new JButton("Client Connessi");
visualizzaClient.addActionListener(azione);
visualizzaClient.setActionCommand(azione.OTTAVOTEST);
/**
* Qui mi vado costruire il pannello che si trova in alto all'interno del quale vado ad
* inserire il titolo e successivamente l'immagine.
*/
pannelloSopra=new JPanel();
pannelloSopra.setPreferredSize(new Dimension(400,400));
pannelloSopra.setOpaque(true);
pannelloSotto=new JPanel();
pannelloSotto.setPreferredSize(new Dimension(200, 200));
pannelloSotto.setLayout(new GridLayout(3,3));
areaUp=new JLabel("<html>Client Amministrativo </html>");
areaUp.setForeground(Color.BLACK);
areaUp.setBackground(Color.BLUE);
areaUp.setFont(new Font("Times New Roman", Font.ITALIC, 30));
pannelloSopra.add(areaUp);
pannelloSotto.add(primoTest);
pannelloSotto.add(secondoTest);
pannelloSotto.add(terzoTest);
pannelloSotto.add(quartoTest);
pannelloSotto.add(quintoTest);
pannelloSotto.add(sestoTest);
pannelloSotto.add(settimoTest);
pannelloSotto.add(visualizzaClient);
contentPane.add(pannelloSopra,BorderLayout.NORTH);
contentPane.add(pannelloSotto,BorderLayout.CENTER);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
GuiClientAmministrativo amministrativo=new GuiClientAmministrativo();
}
Questa invece è la classe che rappresenta la finestra in cui compariranno i client
codice:
public class FinestraClientConnessi extends JFrame implements ActionListener{
/**
*
*/
private final JPanel pannello;
private final JLabel titolo;
private final JPanel resto;
private final JPanel pannelloPrimo;
private final JPanel pannelloSecondo;
private final JPanel pannelloTerzo;
private final JLabel primoClient;
private final JLabel secondoClient;
private final JLabel terzoClient;
public final JButton buttonPrimoClient;
public final JButton buttonSecondoClient;
public final JButton buttonTerzoClient;
public IdentificatoreClient client1;
public IdentificatoreClient client2;
public IdentificatoreClient client3;
public IdentificatoreClient clientScelto;
public boolean modifica;
public FinestraClientConnessi(final Enumeration<IdentificatoreClient> listaClient) {
this.setTitle("Client Connessi");
this.setSize(400,400);
this.setLocationRelativeTo(null);
final Container contentPane = this.getContentPane();
contentPane.setBackground(Color.GRAY);
System.out.println("0");
clientScelto=new IdentificatoreClient(null, null);
System.out.println("1");
while(listaClient.hasMoreElements()){
client1=listaClient.nextElement();
client2=listaClient.nextElement();
client3=listaClient.nextElement();
}
System.out.println("2");
final String clientUno=client1.toString();
final String clientDue=client2.toString();
final String clientTre=client3.toString();
System.out.println("3");
final String path="c:/Users/Daniele/Desktop/immagine.png";
final ImageIcon immagine=new ImageIcon(path);
pannello=new JPanel();
pannello.setPreferredSize(new Dimension(50,50));
System.out.println("4");
titolo=new JLabel("<html>Client Connessi </html>");
titolo.setForeground(Color.BLACK);
titolo.setFont(new Font("Times New Roman", Font.ITALIC, 30));
pannello.add(titolo);
System.out.println("5");
pannelloPrimo=new JPanel();
pannelloPrimo.setPreferredSize(new Dimension(100,100));
System.out.println("6");
buttonPrimoClient=new JButton(immagine);
buttonPrimoClient.setPreferredSize(new Dimension(50,50));
buttonPrimoClient.addActionListener(this);
System.out.println("7");
primoClient=new JLabel(clientUno);
primoClient.setBackground(Color.GRAY);
primoClient.setForeground(Color.BLACK);
primoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
System.out.println("8");
pannelloPrimo.add(buttonPrimoClient);
pannelloPrimo.add(primoClient);
System.out.println("9");
pannelloSecondo=new JPanel();
pannelloSecondo.setPreferredSize(new Dimension(100,100));
System.out.println("10");
buttonSecondoClient=new JButton(immagine);
buttonSecondoClient.setPreferredSize(new Dimension(50,50));
buttonSecondoClient.addActionListener(this);
System.out.println("11");
secondoClient=new JLabel(clientDue);
secondoClient.setBackground(Color.GRAY);
secondoClient.setForeground(Color.BLACK);
secondoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
pannelloSecondo.add(buttonSecondoClient);
pannelloSecondo.add(secondoClient);
System.out.println("12");
pannelloTerzo=new JPanel();
pannelloTerzo.setPreferredSize(new Dimension(100,100));
System.out.println("13");
buttonTerzoClient=new JButton(immagine);
buttonTerzoClient.setPreferredSize(new Dimension(50,50));
buttonTerzoClient.addActionListener(this);
System.out.println("14");
terzoClient=new JLabel(clientTre);
terzoClient.setBackground(Color.WHITE);
terzoClient.setForeground(Color.BLACK);
terzoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
pannelloTerzo.add(buttonTerzoClient);
pannelloTerzo.add(terzoClient);
System.out.println("15");
resto=new JPanel();
resto.setPreferredSize(new Dimension(300,300));
resto.setLayout(new GridLayout(3,1));
resto.add(pannelloPrimo);
resto.add(pannelloSecondo);
resto.add(pannelloTerzo);
System.out.println("16");
System.out.println("17");
contentPane.add(pannello,BorderLayout.NORTH);
contentPane.add(resto);
System.out.println("18");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("19");
}
@Override
public void actionPerformed(final ActionEvent scelta) {
final JButton bottonePremuto=(JButton) scelta.getSource();
if(bottonePremuto.equals(buttonPrimoClient)){
clientScelto=client1;
modifica=true;
}
else if (bottonePremuto.equals(buttonSecondoClient)) {
clientScelto=client2;
modifica=true;
}
else if(bottonePremuto.equals(buttonTerzoClient)){
clientScelto=client3;
modifica=true;
}
else modifica=false;
JOptionPane.showMessageDialog(null, "Nessuna scelta effettuata");
}
}
Qui c'è il listener relativo alla spinta del primo bottone nel gui amministrativo
codice:
public class ListenerPrimoTest implements ActionListener {
public static final int primotest=1;
public static final String PRIMOTEST = "primo";
private int portaAmmi;
@Override
public void actionPerformed(ActionEvent primoEvento) {
System.out.println("1");
String premuto=primoEvento.getActionCommand();
if(premuto==PRIMOTEST){
System.out.println("2");
IdentificatoreClient clientAttivo=new IdentificatoreClient(null, null);
boolean modifico;
System.out.println("3");
Socket cac=null;
Enumeration<IdentificatoreClient> clientPresenti=null;
System.out.println("4");
try {
InetSocketAddress indirizzoServer = new InetSocketAddress(
"localhost", 8004);
cac = new Socket();
cac.connect(indirizzoServer);
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Connessione Rifiutata", "Errore", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
System.out.println("5");
portaAmmi = cac.getLocalPort();
ObjectOutputStream outCa=null;
ObjectInputStream inCa=null;
System.out.println("6");
try {
outCa = new ObjectOutputStream(cac.getOutputStream());
inCa= new ObjectInputStream(cac.getInputStream());
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,"Stream non creati", "Errore",JOptionPane.ERROR_MESSAGE);
}
System.out.println("Chiusa la socket ricezioneMess con successo!");
Object messaggioTabellaClientD=null;
System.out.println("7");
try {
messaggioTabellaClientD=inCa.readObject();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("8");
if(messaggioTabellaClientD instanceof MessTabellaClientDist){
MessTabellaClientDist tabellaClientD= (MessTabellaClientDist messaggioTabellaClientD;
Hashtable<IdentificatoreClient, InformazioniPC> tabellaDistribuiti = tabellaClientD.getHashtableCD();
clientPresenti = tabellaDistribuiti.keys();
System.out.println("9");
}
System.out.println("11");
FinestraClientConnessi clientConnessi=new FinestraClientConnessi(clientPresenti);
System.out.println("12");
modifico=clientConnessi.modifica;
System.out.println(modifico);
System.out.println("13");
if(modifico==true){
System.out.println("14");
clientAttivo=clientConnessi.clientScelto;
MessaggioFunzionalitaScelta funzione1=new MessaggioFunzionalitaScelta(primotest, clientAttivo,null);
try {
outCa.writeObject(funzione1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
outCa.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Chiusa la socket ricezioneMess con successo!");
int portaAmministrativo=cac.getLocalPort();
try {
cac.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Il mio problema sta nel fatto che il listener continua la sua esecuzione senza aspettare che io dalla finestra dei client connessi modifico client scelto ed il parametro modifica settando quest'ultimo a true e poi passandoli al listener.Come posso fare e cosa c'è che non va?