Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    LA finestra non si visualizza se essa chiama un ciclo

    SAlve ragazzi, avrei una domanda per voi.. ho creato un JFrame, dopo l'inizializzazione, questo JFrame chiama un metodo in cui all'interno fà un ciclo. Questo ciclo è stato fatto in maniera tale da bloccarsi alla pressione del tasto stop inserito nelal finestra. Il problema sta nel fatto che la finestra non viene visualizzata, o meglio viene visualizzata ma non riesco a vedere nessun componente. Se provo invece a levare il ciclo, tutto funziona. P.S il ciclo sta in un metodo che è fuori la classe della finestra. Come posso risolvere questo problema ??? grazie 1000

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Probabilmente con il ciclo e con l'eventuale "blocco" di cui parli , blocchi l'EDT (Event Dispatch Thread , il thread che si "occupa" dell'interfaccia grafica.
    Potresti far operare quel ciclo in un altro thread..


  3. #3
    GRazie per la risposta, ma non sono un espertissimo di java, so più o meno cosa sono i thread.. ma non saprei utilizzarli..qualche consiglio ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da giupardeb
    GRazie per la risposta, ma non sono un espertissimo di java, so più o meno cosa sono i thread.. ma non saprei utilizzarli..qualche consiglio ?
    Be' non sapendo niente del codice che hai scritto non posso far altro che suggerirti di studiare i Thread e l'interfaccia Runnable .. inoltre googlando un po' troverai una miriade di esempi di codice sulla creazione , l'avvio e tutto ciò che riguarda i thread.


  5. #5
    Sei stato gentilissimo, scusa se non ho postato il codice, te lo posto subito.. sperando che puoi aiutarmi, poichè essendo un progetto universitario dove i thread non sono stati argomenti di lezione non ho studiato il loro funzionamento..solo che a questo punto mi servono xD, comunque ti posto il codice inerente al problema:

    classe che chiama il metodo partita dalla classe Campionato che è in un package a parte da quello della finestra:

    codice:
    public class FinestraPartita extends JFrame {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 6555644770549918991L;
    /*	private JFrame frame;
    	private Palla ball;
    	private JLabel palla;*/
    	private JPanel panel_1;
    
    	/**
    	 * Create the application.
    	 */
    	public FinestraPartita(Giocatore campo [][], final Campionato c) {
    		initialize(campo,c);
    		c.Partita(c.squadra, c.squadre[0],this,campo);
    	
    	}
    Questo è il metodo partita di prova, per vedere se funziona..

    codice:
    public void partita(SquadraUmano umano, SquadraAvversaria computer,FinestraPartita f,Giocatore[][] campo){
    		do{
    			i++;
    		}
    		while (!ferma);
    		System.out.print(i);
    	}
    Te ne sarei grado se risolvessi il problema..dato che il tempo stringe



  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Emmm si , immagino che il progetto sia piuttosto ampio (vedo infatti metodi e Classi che non compaiono nell'ultra-striminzito frammento di codice postato) ma non hai postato nulla di utile a farmi capire dove possa stare l'errore..

  7. #7
    Ti ho posto l'ultra striminzito pezzo di codice..perché nel resto del codice di entrambe le classi ci sono metodi che non servono per il mio fine..comunque sia se può aiutarti qui c'è il codice:


    FinestraPartita:

    codice:
    package graphic;
    import Project.Campionato;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    
    import Project.Giocatore;
    import javax.swing.JSplitPane;
    import javax.swing.JLabel;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import javax.swing.ImageIcon;
    import javax.swing.UIManager;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    public class FinestraPartita extends JFrame {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 6555644770549918991L;
    /*	private JFrame frame;
    	private Palla ball;
    	private JLabel palla;*/
    	private JPanel panel_1;
    
    	/**
    	 * Create the application.
    	 */
    	public FinestraPartita(Giocatore campo [][], final Campionato c) {
    		initialize(campo,c);
    		c.Partita(c.squadra, c.squadre[0],this,campo);
    	
    	}
    
    	/**
    	 * Initialize the contents of the frame.
    	 */
    	private void initialize(Giocatore campo [][],final Campionato c) {
    		this.setSize(700, 400);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		JPanel panel = new JPanel();
    		getContentPane().add(panel, BorderLayout.CENTER);
    		panel.setLayout(new BorderLayout(0, 0));
    		
    		JPanel panelScelte = new JPanel();
    		panel.add(panelScelte, BorderLayout.SOUTH);
    		panelScelte.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		
    		JButton btnStop = new JButton("Stop");
    		btnStop.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				//ferma la partita
    				c.setFerma(true);
    			}
    		});
    		panelScelte.add(btnStop);
    		
    		JButton btnRilancia = new JButton("Rilancia");
    		btnRilancia.setEnabled(false);
    		panelScelte.add(btnRilancia);
    		
    		JButton btnTira = new JButton("Tira");
    		panelScelte.add(btnTira);
    		
    		JButton btnPassaggio = new JButton("Passaggio");
    		panelScelte.add(btnPassaggio);
    		
    		JButton btnContrasto = new JButton("Contrasto");
    		panelScelte.add(btnContrasto);
    		
    		JButton btnSostituzioni = new JButton("Sostituzioni");
    		panelScelte.add(btnSostituzioni);
    		
    		JSplitPane splitPane = new JSplitPane();
    		panel.add(splitPane, BorderLayout.CENTER);
    		
    		JLabel visualizzainfopartita = new JLabel("");
    		splitPane.setRightComponent(visualizzainfopartita);
    		
    		 panel_1 = new JPanel();
    		panel_1.setBackground(UIManager.getColor("OptionPane.questionDialog.border.background"));
    		splitPane.setLeftComponent(panel_1);
    		GridBagLayout gbl_panel_1 = new GridBagLayout();
    		gbl_panel_1.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    		gbl_panel_1.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
    		gbl_panel_1.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    		gbl_panel_1.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    		panel_1.setLayout(gbl_panel_1);
    		
    		JLabel lblDifensore = new JLabel();
    		lblDifensore.setEnabled(false);
    		lblDifensore.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblDifensore = new GridBagConstraints();
    		gbc_lblDifensore.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensore.gridx = 1;
    		gbc_lblDifensore.gridy = 1;
    		panel_1.add(lblDifensore, gbc_lblDifensore);
    	//	((MyJLabel) lblDifensore).setX(gbc_lblDifensore.gridx);
    	//	((MyJLabel) lblDifensore).setY(gbc_lblDifensore.gridy);
    		
    		
    		JLabel lblCentrocampista = new JLabel("");
    		lblCentrocampista.setEnabled(false);
    		lblCentrocampista.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblCentrocampista = new GridBagConstraints();
    		gbc_lblCentrocampista.insets = new Insets(0, 0, 5, 5);
    		gbc_lblCentrocampista.gridx = 3;
    		gbc_lblCentrocampista.gridy = 1;
    		panel_1.add(lblCentrocampista, gbc_lblCentrocampista);
    		
    		JLabel lblCentrocampistaAvv = new JLabel("");
    		lblCentrocampistaAvv.setEnabled(false);
    		lblCentrocampistaAvv.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/pallaAvv.png")));
    		GridBagConstraints gbc_lblCentrocampistaAvv = new GridBagConstraints();
    		gbc_lblCentrocampistaAvv.insets = new Insets(0, 0, 5, 5);
    		gbc_lblCentrocampistaAvv.gridx = 4;
    		gbc_lblCentrocampistaAvv.gridy = 1;
    		panel_1.add(lblCentrocampistaAvv, gbc_lblCentrocampistaAvv);
    		
    		JLabel lblDifensoreAvv = new JLabel("");
    		lblDifensoreAvv.setEnabled(false);
    		lblDifensoreAvv.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/pallaAvv.png")));
    		GridBagConstraints gbc_lblDifensoreAvv = new GridBagConstraints();
    		gbc_lblDifensoreAvv.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensoreAvv.gridx = 6;
    		gbc_lblDifensoreAvv.gridy = 1;
    		panel_1.add(lblDifensoreAvv, gbc_lblDifensoreAvv);
    		
    		JLabel lblPortiere = new JLabel("");
    		lblPortiere.setName("Portiere");
    		lblPortiere.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/portiere.gif")));
    		lblPortiere.setEnabled(false);
    		GridBagConstraints gbc_lblPortiere = new GridBagConstraints();
    		gbc_lblPortiere.insets = new Insets(0, 0, 5, 5);
    		gbc_lblPortiere.gridx = 0;
    		gbc_lblPortiere.gridy = 2;
    		panel_1.add(lblPortiere, gbc_lblPortiere);
    		JLabel lblDifensore_1 = new JLabel("");
    		lblDifensore_1.setEnabled(false);
    		lblDifensore_1.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblDifensore_1 = new GridBagConstraints();
    		gbc_lblDifensore_1.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensore_1.gridx = 1;
    		gbc_lblDifensore_1.gridy = 2;
    		panel_1.add(lblDifensore_1, gbc_lblDifensore_1);
    		JLabel lblAttacAvv = new JLabel("");
    		lblAttacAvv.setEnabled(false);
    		lblAttacAvv.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/pallaAvv.png")));
    		GridBagConstraints gbc_lblAttacAvv = new GridBagConstraints();
    		gbc_lblAttacAvv.insets = new Insets(0, 0, 5, 5);
    		gbc_lblAttacAvv.gridx = 2;
    		gbc_lblAttacAvv.gridy = 2;
    		panel_1.add(lblAttacAvv, gbc_lblAttacAvv);
    		
    		JLabel lblCentrocampista1 = new JLabel("");
    		lblCentrocampista1.setEnabled(false);
    		lblCentrocampista1.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblCentrocampista1 = new GridBagConstraints();
    		gbc_lblCentrocampista1.insets = new Insets(0, 0, 5, 5);
    		gbc_lblCentrocampista1.gridx = 3;
    		gbc_lblCentrocampista1.gridy = 2;
    		panel_1.add(lblCentrocampista1, gbc_lblCentrocampista1);
    		
    		JLabel lblCentrocampistaAvv1 = new JLabel("");
    		lblCentrocampistaAvv1.setEnabled(false);
    		lblCentrocampistaAvv1.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/pallaAvv.png")));
    		GridBagConstraints gbc_lblCentrocampistaAvv1 = new GridBagConstraints();
    		gbc_lblCentrocampistaAvv1.insets = new Insets(0, 0, 5, 5);
    		gbc_lblCentrocampistaAvv1.gridx = 4;
    		gbc_lblCentrocampistaAvv1.gridy = 2;
    		panel_1.add(lblCentrocampistaAvv1, gbc_lblCentrocampistaAvv1);
    		
    		JLabel lblAttaccante = new JLabel("");
    		lblAttaccante.setEnabled(false);
    		lblAttaccante.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblAttaccante = new GridBagConstraints();
    		gbc_lblAttaccante.insets = new Insets(0, 0, 5, 5);
    		gbc_lblAttaccante.gridx = 5;
    		gbc_lblAttaccante.gridy = 2;
    		panel_1.add(lblAttaccante, gbc_lblAttaccante);
    		
    		JLabel lblDifensoreAvv1 = new JLabel("");
    		lblDifensoreAvv1.setEnabled(false);
    		lblDifensoreAvv1.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/pallaAvv.png")));
    		GridBagConstraints gbc_lblDifensoreAvv1 = new GridBagConstraints();
    		gbc_lblDifensoreAvv1.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensoreAvv1.gridx = 6;
    		gbc_lblDifensoreAvv1.gridy = 2;
    		panel_1.add(lblDifensoreAvv1, gbc_lblDifensoreAvv1);
    		
    		JLabel lblPortiereAvv = new JLabel("");
    		lblPortiereAvv.setEnabled(false);
    		lblPortiereAvv.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/portiere.gif")));
    		GridBagConstraints gbc_lblPortiereAvv = new GridBagConstraints();
    		gbc_lblPortiereAvv.insets = new Insets(0, 0, 5, 5);
    		gbc_lblPortiereAvv.gridx = 7;
    		gbc_lblPortiereAvv.gridy = 2;
    		panel_1.add(lblPortiereAvv, gbc_lblPortiereAvv);
    		
    		JLabel lblDifensore_2 = new JLabel("");
    		lblDifensore_2.setEnabled(false);
    		lblDifensore_2.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		GridBagConstraints gbc_lblDifensore_2 = new GridBagConstraints();
    		gbc_lblDifensore_2.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensore_2.gridx = 1;
    		gbc_lblDifensore_2.gridy = 3;
    		panel_1.add(lblDifensore_2, gbc_lblDifensore_2);
    		
    .......... continua con la creazione delle JLabel
    	}
    	
    	public JPanel getPanel(){
    		return panel_1;
    	}
    	
    }
    qui invece il codice del campionato:

    codice:
    package Project;
    import graphic.*;
    
    import java.awt.Point;
    import java.util.ArrayList;
    
    import javax.swing.JFrame;
    
    public class Campionato 
    {
    	public SquadraUmano squadra;
    
    	public SquadraAvversaria squadre[] = new SquadraAvversaria [19];
    
    	public DatabaseGiocatori db;
    
    	private String continua = ""; //utile per i cicli
    	private boolean ferma = false;
    
    	public Giocatore [] giocatoridavisualizzare = null;
    
    	public Campionato(String miasquadra, JFrame j) //la squadra che l'utente sceglie viene decisa nel main.. tanto per fargli fare qualcosa dal main.. 
    	{
    		j.dispose();
    		db = new DatabaseGiocatori();
    
    		squadra = db.CreaSquadra(miasquadra);
    
    		for(int i = 0; i<squadre.length; i++){
    			squadre[i] = db.CreaSquadre(miasquadra);
    			if(squadre[i] == null) i--;
    		}
    
    		RichiamaFinestraCampionato(db);
    	}
    
    
    ................ 
    
    
    	public void Partita(SquadraUmano umano, SquadraAvversaria computer,FinestraPartita f,Giocatore[][] campo){
    		int i = 0;
    		do{
    			i++;
    		}
    		while (!ferma);
    	}
    	
    	public void CreaAssociazioniSquadre(){
    		
    	}
    	
    	public void setFerma(boolean a){
    		ferma = a;
    	}
    
    }
    ti ricordo che il ciclo do-while dentro la partita ha solamente lo scopo di provare il codice con un ciclo.. dove ci sono i puntini ho dovuto eliminare frammenti di codice inutili dato che non mi permette il forum di postare più di un tot caratteri

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Mmm ho l'impressione , anzi la certezza , che il ciclo "do-while" sia un loop infinito , infatti non vedo al suo interno alcuna istruzione che possa modificare lo stato di "fermo"..ad ogni incremento di "i" devi fare un qualche controllo ed eventualmente richiamare una funzione che setti a true "ferma" (in modo che !ferma sia false) così da uscire dal loop..
    ci dovrebbe essere un qualcosa del genere:
    codice:
    do {
       i++;
       unQualcheMetodo (i);
    }while (!ferma);
    
    //dove unQualcheMetodo sarà del tipo
    void unQualcheMetodo (int i) {
       ...
       if (determinataCondizioneInRelazioneAI)
          ferma = true;
       ...
    }

  9. #9
    si si..il ciclo do-while è infinito poiché dovrebbe essere fermato dal pulsante che andrò a visualizzare nella finestra. il pulsante stop dovrebbe alla pressione cambiare lo stato della variabile ferma a true, quindi fermare il ciclo. però non riesco a vedere la finestra xD

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Sai dove è il problema , sai a cosa è dovuto e ti ho suggerito qualche modo per risolvere..penso non ti manchi nulla!
    Quindi o procedi come ti ho suggerito (Thread) o cambi qualcosa nella struttura del tuo programma..
    Per finire ti do una piccola dimostrazione su come creare e avviare un Thread:

    codice:
    Thread t  = new Thread (new Runnable () {
       public void run () {
          //qui ci metti tutte le istruzioni che il thread deve eseguire
       }
    });
    
    //per avviare il Thread fai così:
    t.start ();
    vabè poi ci sono le varianti..puoi creare una classe che estenda Thread e quindi istanziare suoi oggetti oppure puoi creare una classe che implementi Runnable e dare le sue istanze in pasto ad un Thread..l'imbeccata ti è stata data , a te la scelta!


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.