Help!! JProgressBar java

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Help!! JProgressBar java

Messaggio da SaymonX »

Ragazzi innanzi tutto mi presento sono Simone e mi sono registrato da poco in questo forum.
Spero che qualcuno di voi sicuramente più esperto di me in materia Java mi possa essere d'aiuto.
Premetto che ho cercato parecchio su internet e nei vari forum ma non sono riuscito a risolvere il mio problema.
Ora arrivo al dunque:
sto creando un programma con interfaccia grafica Swing. Voglio realizzare una chiamata di thread tramite JButton da frame principale e in questo thread sarà creato una piccola JDialog in cui sono presenti una JProgressBar che si caricherà di 10 ogni mezzo secondo e sotto la JProgressBar una label con scritta "caricamento".
Riesco a realizzare la finestra e tutto, ma ho un problema durante il caricamento, si visualizza la finestra vuota e non c'e traccia ne di label ne di progress in caricamento. La finestra completa viene visualizzata solo alla fine del caricamento.
Ho provato in mille modi ma nessuna soluzione  :'( :'( :'( :'(
Quindi chiedo a voi come posso fare. Vi posto il codice del thread in maniera tale che possiate darmi una mano.

Codice: Seleziona tutto

//COSTRUZIONE THREAD CON PROGRESBAR
		class ThreadCreation{
			public ThreadCreation () {
			Thread t = Thread.currentThread();
			t.setName("Thread Principale");
			t.setPriority(10);
			JProgressBar progressBar = new JProgressBar(0,100);
			JDialog frame = new JDialog();
			frame.setResizable(false);
			JLabel lbl = new JLabel("Caricamento...");
			JPanel pnlProgress = new JPanel();
			pnlProgress.setPreferredSize(new Dimension(200,40));
			pnlProgress.add(progressBar);
			pnlProgress.add(lbl);
			frame.add(pnlProgress);
			frame.pack();
			frame.setLocation(250,250);			
	       	frame.setVisible(true);	
	        		for (int n = 10; n > 0; n--) {
	        			try {
	          				t.sleep(500);
	          			}catch (InterruptedException e) {}
	          			progressBar.setValue(progressBar.getValue()+10);
	       			}		
			}
		}
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Ragazzi cercando un po sul forum ho risolto il caricamento. Solo che c'e un problema che prima non avevo.
Mentre prima quando avviavo la JDialog, sulla finestra principale non potevo effettuare più operazioni, con il metodo che ho utilizzato ora mentre la JDialog effettua il caricamento posso fare azioni sul frame principale.
Potreste dirmi come bloccare tutti i processi sottostanti durante l'esecuzione del caricamento?
Vi posto il nuovo codice:

Codice: Seleziona tutto

protected JProgressBar pbar;
		protected JLabel lbl;
		
		//COSTRUZIONE PROGRESBAR
		public class ProgressBarT {
			public ProgressBarT() {
				pbar = new JProgressBar();
				JDialog frame = new JDialog();
				frame.setResizable(false);
				lbl = new JLabel("Codifica in corso...");
				JPanel pp = new JPanel();
				pp.setPreferredSize(new Dimension(200,40));
				pp.add(pbar);
				pp.add(lbl);
				frame.add(pp);
				frame.pack();
				frame.setLocation(250,250);
				frame.setVisible(true);
				new ProgressThread().start();
			}
		}
		
		//COSTRUZIONE THREAD CHIAMATO DA PROGRESSBAR
		class ProgressThread extends Thread {
			public void run(){
				pbar.setMaximum(100);
				pbar.setValue(0);
				while(pbar.getValue() < 100 ) {
					try{ Thread.sleep(500); 
					}catch(InterruptedException e){}
					pbar.setValue( pbar.getValue()+10 );
				}
				lbl.setText("Codifica completata");
			}
		}
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

Al posto di:

Codice: Seleziona tutto

JDialog frame = new JDialog();
Usa:

Codice: Seleziona tutto

JDialog frame = new JDialog(framePrincipale);
dove framePrincipale è la finestra che vuoi disattivare quando appare la nuova.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Ciao e grazie per avermi risposto.
Ho un piccolo problema il frame principale non ha un nome e ora mi chiedo anche io il perchè XD
In poche parole queste classi sono dentro un'altra classe principale.
E all'interno del costruttore principale richiamo i thread sopra citato.
Ora ti posto un pezzo del metodo costruttore del frame principale

Codice: Seleziona tutto

public Graf(String titolo) {	
    	setLayout(null);
		this.setTitle(titolo);
		this.setSize(800, 600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mc.setBackground(Color.lightGray);
		text.setEditable(false);
}
Questo crea il mio frame principale. Spero che mi aiuti
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

Semplicemente perché la classe Graf stessa è un frame.
Usa this come framePrincipale
Ultima modifica di Zoff il martedì 8 giugno 2010, 12:51, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Avevo gia pensato di utilizzare

Codice: Seleziona tutto

JDialog frame = new JDialog(this);
però mi da un errore:

Codice: Seleziona tutto

cannot find symbol
symbol  : constructor JDialog(Graf.ProgressBarT)
location: class javax.swing.JDialog
                frame = new JDialog(this);
                        ^
1 error
Può essere che il thread lo scrivo prima del metodo costruttore in questione??
Scusa il fastidio
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

Non avevo guardato bene...
Basta che passi il frame alal ProgressbarT nel costuttore:

Codice: Seleziona tutto

protected JProgressBar pbar;
		protected JLabel lbl;
		
		//COSTRUZIONE PROGRESBAR
		public class ProgressBarT {
			public ProgressBarT(JFrame f) {
				pbar = new JProgressBar();
				JDialog frame = new JDialog(f);
				frame.setResizable(false);
				lbl = new JLabel("Codifica in corso...");
				JPanel pp = new JPanel();
				pp.setPreferredSize(new Dimension(200,40));
				pp.add(pbar);
				pp.add(lbl);
				frame.add(pp);
				frame.pack();
				frame.setLocation(250,250);
				frame.setVisible(true);
				new ProgressThread().start();
			}
		}
		
		//COSTRUZIONE THREAD CHIAMATO DA PROGRESSBAR
		class ProgressThread extends Thread {
			public void run(){
				pbar.setMaximum(100);
				pbar.setValue(0);
				while(pbar.getValue() < 100 ) {
					try{ Thread.sleep(500); 
					}catch(InterruptedException e){}
					pbar.setValue( pbar.getValue()+10 );
				}
				lbl.setText("Codifica completata");
			}
		}
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Ok ora però mi da l'errore nell'istanziazione dell'oggetto di classe ProgressBarT
Ho capito che qnd lo istanzio gli devo passare il frame, ho provato a passargli this ma niente.

Codice: Seleziona tutto

ProgressBarT pbt = new ProgressBarT(this);
Mi esce questo errore.

Codice: Seleziona tutto

cannot find symbol
symbol  : constructor ProgressBarT(<anonymous java.awt.event.ActionListener>)
location: class Graf.ProgressBarT
                    ProgressBarT pbt = new ProgressBarT(this);
                                       ^
1 error
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

Bisogna che posti il codice completo...
Sto andando ad inzecco...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Ok allora queste sono le classi thread:

Codice: Seleziona tutto

		//VARIABILI PER PROGRESSBAR
		protected JProgressBar pbar;
		protected JLabel lbl;
		private JDialog frame;
		protected Thread t;
		
		//COSTRUZIONE PROGRESBAR
		public class ProgressBarT {
			public ProgressBarT(JFrame f) {
				pbar = new JProgressBar();
				frame = new JDialog(f);
				frame.setResizable(false);
				lbl = new JLabel("Codifica in corso...");
				JPanel pp = new JPanel();
				pp.setPreferredSize(new Dimension(200,40));
				pp.add(pbar);
				pp.add(lbl);
				frame.add(pp);
				frame.pack();
				frame.setLocation(250,250);
				frame.setVisible(true);
				new ProgressThread().start();				
			}
		}
		
		//COSTRUZIONE THREAD CHIAMATO DA PROGRESSBAR
		class ProgressThread extends Thread {
			public void run(){
				t = Thread.currentThread();
				t.setName("Thread Principale");
				t.setPriority(10);
				pbar.setMaximum(100);
				pbar.setValue(0);
				while(pbar.getValue() < 100 ) {
					try{ t.sleep(250);  
					}catch(InterruptedException e){}
					pbar.setValue( pbar.getValue()+10 );
				}
				lbl.setText("Codifica completata");
				try{t.sleep(2000); frame.dispose();}
				catch(Exception e){}	
			}
		}
Questo è il costruttore ti posto la parte la parte iniziale e quella dell'errore:

Codice: Seleziona tutto

public Graf(String titolo) {	
    	setLayout(null);
		this.setTitle(titolo);
		this.setSize(800, 600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mc.setBackground(Color.lightGray);
		text.setEditable(false);
		//CRIPTA
		bt1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
					String cp = Consolle.JOPString("Inserisci la chiave di criptaggio");
					int dcp = cp.length();
					int numc = ConsolleCrit.NChiave(cp,dcp);
					
					String mex = Consolle.JOPString("Stringa da criptare");
			        int dim = mex.length();
			        int[] apc = new int[dim];
			        
			        //APPOGGIO ARRAY INTERO DI RITORNO IN APC
					apc = ConsolleCrit.NChar(mex,dim,numc);
					String mr = ConsolleCrit.TBin(apc,dim);
					ProgressBarT pbt = new ProgressBarT(this);
					text.setText(text.getText() + "\n" + mr);
				}
		});
}
Ecco questo è quello importante è inutile ke ti posto tutto il costruttore sono 400 righe di codice XD
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

La prima soluzione-toppa che mi viene in mente è:

Codice: Seleziona tutto

    public Graf(String titolo) {    
        setLayout(null);
        this.setTitle(titolo);
        this.setSize(800, 600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mc.setBackground(Color.lightGray);
        text.setEditable(false);
        //CRIPTA
        bt1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                String cp = Consolle.JOPString("Inserisci la chiave di criptaggio");
                int dcp = cp.length();
                int numc = ConsolleCrit.NChiave(cp,dcp);
                
                String mex = Consolle.JOPString("Stringa da criptare");
                int dim = mex.length();
                int[] apc = new int[dim];
                
                //APPOGGIO ARRAY INTERO DI RITORNO IN APC
                apc = ConsolleCrit.NChar(mex,dim,numc);
                String mr = ConsolleCrit.TBin(apc,dim);
                ProgressBarT pbt = new ProgressBarT(Graf.this);
                text.setText(text.getText() + "\n" + mr);
            }
        });
    }
Ultima modifica di Zoff il martedì 8 giugno 2010, 13:22, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Scusa Zoff ho letto male il tuo codice continuavo a passare f invece di Graff.this
grazie mille sei stato davvero gentile spero di non averti rotto. :-[
Ultima modifica di SaymonX il martedì 8 giugno 2010, 13:25, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Help!! JProgressBar java

Messaggio da Zoff »

L'ho modificato, prova ora.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
SaymonX
Prode Principiante
Messaggi: 14
Iscrizione: martedì 8 giugno 2010, 10:28

Re: Help!! JProgressBar java

Messaggio da SaymonX »

Zoff ha scritto: L'ho modificato, prova ora.
Si con Graf.this funge grazie mille e skusa ankora
Avatar utente
LiCeT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 851
Iscrizione: domenica 29 novembre 2009, 15:06
Località: Essen / Germany

Re: Help!! JProgressBar java

Messaggio da LiCeT »

non dimenticare di mettere [Risolto] al titolo del primo post ;)

ciao
until 26.04.11 located: here; new location is here
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti