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

    problema nella creazione di un JDialog modale

    Salve ragazzi, vi scrivo per porvi un problema che non riesco a risolvere che è di fondamentale importanza. Il problema riguarda la creazione e l'avio di un JDialog modale. Vi posto l'intero codice in cui accade l'errore:

    codice:
    public void partita(final Uman umano, final IA computer,final JFrame frame){
    
    		JFrame frameComandi = new JFrame("Comandi");
    		JDialog comandi = new JDialog(frameComandi, Dialog.ModalityType.DOCUMENT_MODAL);
    
    		JButton	btnRilancia = new JButton("Rilancia");
    		btnRilancia.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				Campionato.durataPartita++;
    				umano.Rilancia(frame, (SquadraUmano) umano.getSquadra(), umano.getGiocatori());
    			}
    		});
    		btnRilancia.setName("Rilancia");
    
    		JButton	btnTira = new JButton("Tira");
    		btnTira.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				Campionato.durataPartita++;
    				umano.Contrasta(frame, umano.getGiocatori(), computer.getGiocatori(), (SquadraUmano)umano.getSquadra(), (SquadraAvversaria)computer.getSquadra());
    				if(((FinestraPartita) frame).getGiocatoreCorrente().getSquadra().equalsIgnoreCase(umano.getSquadra().GetNomeSquadra()))
    					umano.Tira(frame, computer.getGiocatori(), (SquadraAvversaria)computer.getSquadra(), (SquadraUmano)umano.getSquadra());
    			}
    		});
    		btnTira.setName("Tira");
    
    		JButton btnPassaggio = new JButton("Passaggio");
    		btnPassaggio.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				Campionato.durataPartita++;
    				umano.Contrasta(frame, umano.getGiocatori(), computer.getGiocatori(), (SquadraUmano)umano.getSquadra(), (SquadraAvversaria)computer.getSquadra());
    				if(((FinestraPartita) frame).getGiocatoreCorrente().getSquadra().equalsIgnoreCase(umano.getSquadra().GetNomeSquadra()))
    
    					umano.Passa(frame, (SquadraAvversaria)computer.getSquadra(), umano.getGiocatori(), computer.getGiocatori());
    			}
    		});
    		btnPassaggio.setName("Passaggio");
    
    		
    		comandi.add(btnPassaggio);
    		comandi.add(btnTira);
    		comandi.add(btnRilancia);	
    		
    		if((int)(Math.random()*10)>5){
    			((FinestraPartita) frame).setGiocatoreCorrente((Portiere) Search(12,168,umano.getGiocatori()));
    			((FinestraPartita) frame).getGiocatoreCorrente().setEnabled(true);
    		}
    		else{
    			((FinestraPartita) frame).setGiocatoreCorrente((Portiere) Search(638,168,computer.getGiocatori()));
    			((FinestraPartita) frame).getGiocatoreCorrente().setEnabled(true);
    		}
    
    		// continuare. . . . . 
    		while(durataPartita < 5){
    			if (((FinestraPartita) frame).getGiocatoreCorrente().getSquadra().equalsIgnoreCase(squadra.GetNomeSquadra()))	{
    				// Chiedi all'utente
    
    				frameComandi.setVisible(true);
    			}
    			else{
    				//computer
    				TurnoComputer(frame, computer, umano);
    				durataPartita++;
    			}
    		}
    ah dimenticavo... l'errore è un blocco del sistema in genrale tale da costringermi a riavviare il pc

    spero in un vostro aiuto..buona giornata

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema nella creazione di un JDialog modale

    Originariamente inviato da giupardeb
    ah dimenticavo... l'errore è un blocco del sistema in genrale tale da costringermi a riavviare il pc
    Rispondo in ordine "sparso":
    1) Una applicazione Java generalmente non blocca l'intero sistema ... a meno che: a) consumi (in)consapevolmente ingenti risorse (cpu, ram ma solo se l'heap-space max è enorme, disco, ecc...) o b) vada a fare cose poco belle a livello nativo usando Java Native Interface o approcci simili.
    Il (quasi) peggio che può capitare è che la interfaccia grafica (solo della app Java) sia "congelata" o che si "sporchi" se viene fatto del custom painting in modo errato.

    2) Dal codice si evince solo che c'è una dialog "modale" (precisamente "document modal") ma non si vede dove fai il setVisible(true) su comandi. Infatti è qui che, se modale, è "bloccante" (non esce dal setVisible finché la dialog è aperta).

    3) partita() in che contesto (thread) è invocato? (spero il EDT, visto che accedi alla interfaccia utente).

    4) TurnoComputer() che fa?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    rispondo in ordine sparso xD:

    3) è come dici tu è invocato nell'EDT

    4) TurnoComputer() è un metodo che fa delle cose che non sono inerenti alla domanda mia posta, dato che funge

    2) non ho messo nessun comandi.setVisible(true) poichè ho fatto una prova in un file java a parte e basta che metto il frame in cui il jdialog è contenuto a true, che in automatico spunta tutto. (TESTATO )

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da giupardeb
    4) TurnoComputer() è un metodo che fa delle cose che non sono inerenti alla domanda mia posta, dato che funge
    Ok, lo chiedevo solo perché siccome è appunto invocato nel EDT, non deve tenere impegnato il EDT per "troppo" tempo (il "troppo" è relativo alla (non) responsività della interfaccia).

    Originariamente inviato da giupardeb
    basta che metto il frame in cui il jdialog è contenuto a true, che in automatico spunta tutto. (TESTATO )
    Magari sto ricordando male io ... ma non vedo come si possa aprire la dialog se fai solo il setVisible(true) sul frame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    vediamo se riesco a spiegarmi meglio.. allora ho una finestraPartita, che dopo essersi inizializzata con le dimensioni etc, fa partire il metodo partita..in un thread a parte.poi in base a chi ha la palla il metodo partita invoca, turno computer oppure dovrebbe far apparire la finestra modale. NEWS dalla finestra modale, non è cambiato nulla dato che non si vede..anzi..mi si è tornato a bloccare il SO o.o e stavolta sono nel pc fisso..più potente rispetto al portatile..che fare???

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da giupardeb
    fa partire il metodo partita..in un thread a parte
    Scusa ma prima hai detto che era invocato nel EDT.
    Se partita() è eseguito nel contesto di un tuo thread a parte, allora molto di quello che fa è inappropriato: non devi accedere alla interfaccia utente, non devi creare JFrame ecc.., non devi fare setVisible, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    mmmh..scusami se mi sono spiegato male allora.. però diciamo tutto quello che il metodo partita () fà fuziona.. cioè non mi si blocca.. solo adesso che cerco di creare nel metodo partita un JDialog modale mi si pianta tutto

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.