Problema JFrame !! Help me

di il
2 risposte

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
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 Risposte

  • Re: Problema JFrame !! Help me

    Nessuno mi dà una mano?
  • Re: Problema JFrame !! Help me

    Ciao, ascolta il motivo esatto non te lo so dire, pero sembra che facendo partire la gui dal listener crei qualche problema.

    io lo risolto cosi,
    
    
    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("ciao");
          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.setVisible(false);
    // qui  e la mia sol...           
                
                new Thread(){
                	@Override
                	public void run() {
                		dormi.sleep(Integer.parseInt(minuti.getText()));                
                	
                	}
                	
                }.start();
          }
          
       }
          ActionListener listener=new AddInput();
          
          button.addActionListener(listener);
          
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
       private static JTextField minuti=new JTextField(9);
    }
    cmq da me cosi funziona ... il motivo vero non te lo so dire

    Ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte