Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse

Viper13125

Mitglied
Kurze Beschreibung,
Ich hab mir eine Uhr Programmiert mit Uhrzeit, Datum, Countdown und wechselndem Hintergrund.
Dies funktioniert soweit. Jetzt wollte ich noch eine Startseite mache wo man noch ein paar Einstellungen vornehmen kann.
auf dieser ist jetzt ein Button der mich dann zur Uhr bringen soll. Mit denn geänderten Einstellungen (Dies habe ich aber noch nicht in angriff genommen)
Solange ich jetzt aber dies Teil vom Code drin lasse wechselt er zum neuem Frame aber hängt sich dann auf.
Java:
            while(true) {
            SimpleDateFormat time=new SimpleDateFormat("HH:mm:ss");
               String Uhrzeit=time.format(Calendar.getInstance().getTime());
                      timeLabel.setText(Uhrzeit);
              
            SimpleDateFormat date=new SimpleDateFormat("EEEE dd MMM YY");
               String Datum=date.format(Calendar.getInstance().getTime());
                       dateLabel.setText(Datum); 
            
               try {
                   Thread.sleep(1000);
                     } catch (InterruptedException e) {
                        
                         e.printStackTrace();
                     }

nehme ich den Code raus wechselt er der Countdown läuft nur Uhr und Datum sind dann Natürlich weg.
woran kann es liegen.

Hier mal noch der code von der Startseite:
Code:
    private static JTextField textField_92;

    public static void main(String[] args) {
        showWindow();

    }

    public static void showWindow()    {
        JFrame frame = new JFrame("Start");
        frame.setBounds(100,100,1618,904);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        JButton ButtonUhrStart = new JButton("Uhr Starten");
        ButtonUhrStart.setFont(new Font("Arial", Font.PLAIN, 20));
        ButtonUhrStart.setBounds(1433, 779, 161, 33);
        frame.getContentPane().add(ButtonUhrStart);
        
            ButtonUhrStart.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
                frame.setVisible(false);
                uhrFrame w2 = new uhrFrame();
                w2.showWindow();
                
            }
        });
        
        
                
        frame.setVisible(true);


Und hier noch von der Uhr:

Code:
public class uhrFrame {

    public static void main(String[] args) {
        showWindow();
    }
        public static void showWindow()    {
        JFrame frame = new JFrame("UHR");
        frame.getContentPane().setBackground(Color.LIGHT_GRAY);
        frame.setBounds(0,0,2034,1057);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
                JLabel monsterbild = new JLabel("");
        monsterbild.setIcon(new ImageIcon("D:\\eclipse-workspace\\Bilder\\MOTOMONSTER.png"));
        monsterbild.setBounds(760, 23, 500, 165);
        frame.getContentPane().add(monsterbild);
        
        
                   JLabel naestegruppeLabel = new JLabel("\"Nächste Gruppe\"");
           naestegruppeLabel.setVerticalAlignment(SwingConstants.TOP);
        naestegruppeLabel.setFont(new Font("Arial", Font.BOLD, 50));
        naestegruppeLabel.setHorizontalAlignment(SwingConstants.CENTER);
        naestegruppeLabel.setBackground(Color.RED);
        naestegruppeLabel.setForeground(Color.BLACK);
        naestegruppeLabel.setBounds(1450, 630, 550, 372);
        naestegruppeLabel.setBorder(new LineBorder(new Color(0, 0, 0), 3));
        naestegruppeLabel.setOpaque(true);
        
        JLabel counterLabel = new JLabel("20:00");
        counterLabel.setLabelFor(counterLabel);
        counterLabel.setHorizontalAlignment(SwingConstants.CENTER);
        counterLabel.setForeground(Color.BLACK);
        counterLabel.setFont(counterLabel.getFont().deriveFont(120f));
        counterLabel.setBounds(1475, 782, 500, 110);
        frame.getContentPane().add(counterLabel);
        frame.getContentPane().add(naestegruppeLabel);
                
        //******************Timer 1 Start Tourn 1 9:00 Uhr**********************
        
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            
            int counter = 600;           
            @Override
            public void run() {
                if(counter>0) {
                    counter--;
                    counterLabel.setText((counter) / 60 / 60 % 60 +":"+ (counter) / 60 % 60 +":"+ counter %60);
            }       
                else {
                    frame.getContentPane().setBackground(Color.RED);
                    naestegruppeLabel.setBackground(Color.YELLOW);
                    timer.cancel();
                }
            }
        };
        Calendar date1 = Calendar.getInstance();
        date1.set(Calendar.HOUR_OF_DAY,8);
        date1.set(Calendar.MINUTE,50);
        date1.set(Calendar.SECOND,00);
        date1.set(Calendar.MILLISECOND,00);
    
        timer.scheduleAtFixedRate(task, date1.getTime(), 1000);   
        
        //******************Timer 2 Tourn 2  9:20 Uhr**********************
            
        Timer timer2 = new Timer();
        TimerTask task2 = new TimerTask() {
            
            int counter = 1200;
            @Override
            public void run() {
                if(counter>180) {
                    counter--;
                //    TimeLabel1.setText((counter) / 60 / 60 % 60 + ":" + (counter) / 60 % 60 + ":" + counter %60);
            }
                else {
                    frame.getContentPane().setBackground(Color.YELLOW);
                    //verticalBox.setBackground(Color.GREEN);                   
                    timer2.cancel();
                }
            }
        };
        Calendar date2 = Calendar.getInstance();
        date2.set(Calendar.HOUR_OF_DAY,9);
        date2.set(Calendar.MINUTE,0);
        date2.set(Calendar.SECOND,00);
        date2.set(Calendar.MILLISECOND,00);
    
        timer2.scheduleAtFixedRate(task2, date2.getTime(), 1000);
        
        Timer timer2_1 = new Timer();
        TimerTask task2_1 = new TimerTask() {
            
            int counter = 1200;   
            @Override
            public void run() {
                if(counter>0) {
                    counter--;
                    counterLabel.setText((counter) / 60 / 60 % 60 + ":" + (counter) / 60 % 60 + ":" + counter %60);
            }   
                else {
                    naestegruppeLabel.setBackground(new Color(0, 128, 0));
                    timer2_1.cancel();
                }
            }
        };
        Calendar date2_1 = Calendar.getInstance();
        date2_1.set(Calendar.HOUR_OF_DAY,9);
        date2_1.set(Calendar.MINUTE,0);
        date2_1.set(Calendar.SECOND,00);
        date2_1.set(Calendar.MILLISECOND,00);
    
        timer2_1.scheduleAtFixedRate(task2_1, date2_1.getTime(), 1000);
        
                
        JLabel timeLabel = new JLabel();
        timeLabel.setForeground(Color.BLACK);
        timeLabel.setFont(timeLabel.getFont().deriveFont(500f));
        timeLabel.setBounds(0, 190, 2012, 400);
        frame.getContentPane().add(timeLabel);
            
        JLabel dateLabel = new JLabel("");
        dateLabel.setForeground(Color.BLACK);
        dateLabel.setHorizontalAlignment(SwingConstants.RIGHT);
        dateLabel.setFont(new Font("Arial", Font.PLAIN, 40));
        dateLabel.setBounds(1532, 10, 480, 70);
        frame.getContentPane().add(dateLabel);
                                                                                                                                                                                                                    
            while(true) {
            SimpleDateFormat time=new SimpleDateFormat("HH:mm:ss");
               String Uhrzeit=time.format(Calendar.getInstance().getTime());
                      timeLabel.setText(Uhrzeit);
              
            SimpleDateFormat date=new SimpleDateFormat("EEEE dd MMM YY");
               String Datum=date.format(Calendar.getInstance().getTime());
                       dateLabel.setText(Datum); 
            
               try {
                   Thread.sleep(1000);
                     } catch (InterruptedException e) {
                        
                         e.printStackTrace();
                     }
                        
           //****************Uhrzeit und Datum ende*************************
                
            frame.setVisible(true);       
            }
    }
}

hoffe es kann mir wer helfen
 
Deine Angaben sind relativ ungenau.

Aber wenn ich Dich richtig verstanden habe, dann hängt sich nicht Eclipse auf sondern Dein Programm.

Und das "hängt sich auf", weil Du eine Endlosschleife laufen lässt. Das ist nun einmal etwas, das man generell nicht machen sollte.

Kurze Erläuterung: Es gibt einen UI-Thread, der dafür da ist, Events vom User zu verarbeiten und das Fenster vom Programm zu zeichnen und all sowas. Das bedeutet, dass Du in den Events immer nur kurz etwas machen darfst und nie etwas, das länger dauert. (Also auch auf keinen Fall eine Endlosschleife!)

Dies funktioniert soweit.
Das war ein Eindruck, den Du ggf. hattest. Aber das war zumindest etwas bestreitbar.

Wenn ein Java Programm gestartet wird, dann läuft Dein Programm auf dem Hauptthread der Applikation. Wenn Du dann ein Fenster öffnest, dann hast Du den Hauptthread und der UI-Thread (Offiziell heisst dieser in Swing: Event Dispatch Thread, kurz EDT). In dem Hauptthread konnte dann eine Endlosschleife laufen - das hat den UI-Thread nicht beeinflusst.

Aber mit der Hauptseite wird das nun im Event ausgeführt und die Endlosschleife blockiert dem UI-Thread.

Generell gab es aber etwas, das ich als problematisch ansehe: Die UI Elemente sollten nur aus dem UI Thread verändert werden. Du hast das aber in der Endlosschleife gemacht. Das ist nicht unproblematisch.


Du kannst so eine Schleife in einem eigenen Thread ausführen. Anpassungen an der UI kannst Du mit SwingUtilities.invokeLater ausführen.

Das findet sich aber auch sehr viel im Web, das Du nachlesen kannst.
...
 

Zurück
Oben