2017-09-30 5 views
3

Ich habe diese einfache Java-Anwendung mit Swing. In dem Moment, in dem ich das Programm ausführe, erscheint der Rahmen, aber ich kann nirgendwohin klicken und der Knopf erscheint erst nach ein paar Sekunden. Ich bin sehr neu in der javas Swing-Bibliothek, so dass ich etwas verpassen könnte, aber von dem, was ich gelesen habe, sollte dieser Code keine Probleme verursachen.Java JFrame Einfrieren

import java.awt.Graphics; 
import java.awt.image.BufferStrategy; 
import java.awt.FlowLayout; 
import javax.swing.*; 

public class Game { 

    public static void main(String[] args) { 

     JFrame frame = new JFrame("JFrame Example"); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new FlowLayout()); 
     JLabel label = new JLabel("This is a label!"); 
     JButton button = new JButton(); 

     button.setText("Press me"); 

     panel.add(label); 
     panel.add(button); 

     frame.add(panel); 
     frame.setSize(300, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

    } 
} 

EDIT So neu installiert ich meine jdk aber entdeckt: wenn mein Browser ausgeführt wird, wenn ich den obigen Code ausführen wird es hängen und einfrieren, aber wenn ich meinen Browser schließen Sie es wie erwartet läuft. Aber ich kann meinen Browser erst starten, wenn ich meine Anwendung beendet habe, daher scheint etwas mit meiner Installation nicht in Ordnung zu sein, da diese nicht dieselben Ressourcen verwenden sollten?

EDIT mein Problem gelöst: hatte mehrere Versionen von JDK und JRE installieren, so unstalled beide und dann neuesten Versionen und alles installiert scheint zu funktionieren!

+0

Java-Version, OS, CPU, RAM? – PeterMmm

+0

Ich benutze Java 8 auf Windows 10, i5-6600k und 16GB RAM. Ich habe jedoch festgestellt, dass es auch beim Öffnen der "About Java" -Anwendung auf die gleiche Art und Weise verzögert wurde. Daher scheint mein Problem eher mit Java zu tun zu haben als mit diesem spezifischen Code. – tiggybits

+0

sollte funktionieren wie du es getan hast. Ich bin gespannt, ob dein Rahmen tatsächlich erstarrt oder einfach nur nach zB Fensterverkleinerung erscheint. – Antoniossss

Antwort

-1

Sie Notwendigkeit zu UI unter UI erstellen Thread Dispatching:

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     // code to create UI or call to function that creates the UI 
    } 
}); 

Java 8 Stil:

SwingUtilities.invokeLater(()->{ 
    // Your UI code 
}); 

Wenn Sie nicht teilweise nicht, dass Idiom verwenden dann kann die UI sein in inkonsistenten Zustand erstellt, siehe Creating UI in swing:

fast alle c Ode, die Lauf auf dem Event Dispatch Thread

Sie auch invokeAndWait verwenden können, ist man bis zum UI müssen blockieren erstellt oder interagiert mit Swing-Komponenten müssen erstellt.

+0

Downvoting braucht eine Erklärung. –

+0

Abgesehen von der Antwort auf ein einfaches Duplikat, wird die Frage nicht beantwortet. Sein Code funktioniert gut für mich. Sie verallgemeinern, ohne sich des Problems bewusst zu sein. –

+0

Ich habe keine Downvote, auch das ist der empfohlene Weg, das Beispiel läuft hier ohne Probleme – PeterMmm