Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35

    [Java] Problema JFrame !! Help me

    Ciao ragazzi...Il problema è questo, ho creato un programma stupidissimo in java che funziona a metà. Il programma non ha una grande utilità ma per questione di principio vorrei sapere dove sbaglio. Il programma chiede in input dall'utente con un frame un tot di minuti. Questi minuti rappresentano il tempo totale con cui si manda in sleep un tread.Il dato in input verrà salvato in un file in modo tale che la prossima volta in cui sarà eseguito prenderà il dato direttamente dal file senza che l'utenta reinserisca il dato. Il programma visualizza inoltre un countdown sui minuti inseriti al termine dei quali il thread non sarà più in sleep. Il problema è che quando la prima volta si inseriscono i minuti e si clicca sul pulsante start il secondo frame (quello del countdown) non viene visualizzato del tutto(si visualizzono solo i contorni del frame) invece se lo si fà rieseguire per la seconda volta funziona... Vi allego il codice sorgente


    codice:
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    
    public class Input {
    
    	public static void Grafica()
    	{
    		final JFrame frame=new JFrame();
    		JPanel panel=new JPanel();
    	
    		JButton button=new JButton("Start");
    		JLabel label=new JLabel("Inserisci minuti");
    		panel.add(label);
    		panel.add(minuti);
    		panel.add(button);
    		frame.add(panel);
    		frame.setSize(300,100);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    		
    		class AddInput implements ActionListener{
    			
    			public void actionPerformed(ActionEvent event)
    		{
    				PrintStream output = null;
    				try {
    					output = new PrintStream(new     FileOutputStream("Setting.txt"));
    				} catch (FileNotFoundException e) {
    					
    					e.printStackTrace();
    				}
    				output.println("Inserisci minuti: "+minuti.getText());
    				
    				frame.dispose();
    				dormi.sleep(Integer.parseInt(minuti.getText()));
    				
    				
    		}
    		
    		
    		
    		
    	}
    		ActionListener listener=new AddInput();
    		
    		button.addActionListener(listener);
    		
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    	private static JTextField minuti=new JTextField(9);
    }
    
    
    
    
    
    ---------------------------------------------------------------------------------------
    
    
    public class dormi 
    {
    	public static void sleep(int min)
    	
    	{
    		long milles=min*60000;
    		dormi.countdown(milles);
    		
    		
    		try {
    			Thread.sleep(milles);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    private static dormiGui dormi=new dormiGui();
    }
    
    ------------------------------------------------------------------------------------------
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.TimeZone;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    
    
    public class dormiGui {
    	
    	public dormiGui()
    	{
    		JPanel panel;
    		JFrame frame=new JFrame();
    		panel = new JPanel();
    		JLabel label= new JLabel( "countdown: " );
    	
    		countdown = new JTextField(9 );
    		panel.add(label);
    		panel.add(countdown);
    		
    		frame.add(panel);
    		frame.setSize(300,100);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    
    	}
    
    	
    	public void countdown(long Milles)
    	{
    		String s=null;
            
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            format.setTimeZone(TimeZone.getTimeZone("GMT"));
           s=(format.format(new Date(Milles)));
          
           
           int ore=Integer.parseInt(s.substring(0,2));
            int minuti=Integer.parseInt(s.substring(3,5));
            int secondi=Integer.parseInt(s.substring(6,8));
            GregorianCalendar gcalendar = new GregorianCalendar();
    
            while (ore >= 0) {
    		    gcalendar.set(Calendar.HOUR, ore);
    		    while (minuti >= 0) {
    		        gcalendar.set(Calendar.MINUTE, minuti);
    		        while (secondi >= 0) {
    		            gcalendar.set(Calendar.SECOND, secondi);
    		           countdown.setText(gcalendar.get(Calendar.HOUR)+" h:"+gcalendar.get(Calendar.MINUTE)+" min:"+gcalendar.get(Calendar.SECOND)+" sec");
    		            try {
    		                Thread.sleep((long) 1000D);
    		            } catch(InterruptedException _ex) {}
    		            secondi--;
    		        }
    		        minuti--;
    		        secondi = 59;
    		    }
    		    ore--;
    		    minuti = 59;
    		}
           
            
    
    	}
    	 
    
    private JTextField countdown;
    }
    
    
    ---------------------------------------------------------------------------------------
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Locale;
    import java.util.Scanner;
    
    
    
    
    public class dormiTest {
    
    	public static void main(String[] args) {
    		
    		File f=new File("Setting.txt");
    
    		if(!(f.exists()))
    
    		{
    			Input.Grafica();
    		}else{
    				
    			Locale.setDefault(Locale.ENGLISH);
    			Scanner s = null;
    			try {
    				s = new Scanner(new File("Setting.txt"));
    			} catch (FileNotFoundException e) {
    				
    				e.printStackTrace();
    			}
    			String riga=s.nextLine();
    			Scanner s1=new Scanner(riga).useDelimiter("\\s*Inserisci minuti:\\s*");
    			String minuti=s1.next();
    			
    			s1.close();
    			s.close();
    			
    			dormi.sleep(Integer.parseInt(minuti));
    			
    	}
    
    }

  2. #2
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    sicuramente succede perché blocchi il thread principale
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35
    e quindi come devo fare per correggere il codice???

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da slack85
    e quindi come devo fare per correggere il codice???
    Innanzitutto potresti leggere Threads and Swing

    Inoltre suggerisco di:
    a) Scrivere il codice con una corretta spaziatura/indentazione
    b) Cercare di seguire il più possibile le convenzioni sulle denominazioni degli identificatori
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35
    Originariamente inviato da andbin
    Innanzitutto potresti leggere Threads and Swing

    Inoltre suggerisco di:
    a) Scrivere il codice con una corretta spaziatura/indentazione
    b) Cercare di seguire il più possibile le convenzioni sulle denominazioni degli identificatori
    Grazie per la risposta e accetto i suggerimenti....Ho letto il link che hai postato ma non ho capito bene, con i thread non ci sò fare.. Mi puoi dare una mano a correggere il codice? Please

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da slack85
    Grazie per la risposta e accetto i suggerimenti....Ho letto il link che hai postato ma non ho capito bene, con i thread non ci sò fare.. Mi puoi dare una mano a correggere il codice? Please
    Capisco che con i thread non sei pratico .... ma qui la questione appunto è: o usi un thread a parte oppure usi un timer. In ogni caso devi cambiare proprio approccio ... non puoi tenere "impegnato" il EDT (event dispatch thread, il thread nel cui contesto vengono inviati e gestiti gli eventi), pena appunto "congelamento" della interfaccia utente.

    In questa vecchia discussione avevo postato l'esempio di un semplice "cronometro". Anche se non è affatto esattamente quello che devi fare tu, almeno puoi vedere come si usa il Timer di Swing.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35
    Originariamente inviato da andbin
    Capisco che con i thread non sei pratico .... ma qui la questione appunto è: o usi un thread a parte oppure usi un timer. In ogni caso devi cambiare proprio approccio ... non puoi tenere "impegnato" il EDT (event dispatch thread, il thread nel cui contesto vengono inviati e gestiti gli eventi), pena appunto "congelamento" della interfaccia utente.

    In questa vecchia discussione avevo postato l'esempio di un semplice "cronometro". Anche se non è affatto esattamente quello che devi fare tu, almeno puoi vedere come si usa il Timer di Swing.

    Grazie ancora per la dritta ma non riesco a farlo funzionare mi sà che sono impedito

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35
    ragazzi scusatemi ma non riesco a farlo funzionare....Qualcuno può aiutarmi a correggere il codice?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    35
    nessuno mi aiuta?

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.