Warum mein Swing-basierte GUI-Anwendung reagiert nicht?
-
21-09-2019 - |
Frage
Ich versuche, meine erste GUI-Anwendung (Java + Eclipse-+ Swing) zu erstellen. Dies ist mein Code:
import java.awt.*;
import javax.swing.*;
public class HelloWorldSwing extends JFrame {
JTextArea m_resultArea = new JTextArea(6, 30);
//====================================================== constructor
public HelloWorldSwing() {
//... Set initial text, scrolling, and border.
m_resultArea.setText("Enter more text to see scrollbars");
JScrollPane scrollingArea = new JScrollPane(m_resultArea);
scrollingArea.setBorder(BorderFactory.createEmptyBorder(10,5,10,5));
// Get the content pane, set layout, add to center
Container content = this.getContentPane();
content.setLayout(new BorderLayout());
content.add(scrollingArea, BorderLayout.CENTER);
this.pack();
}
//============================================================= main
public static void main(String[] args) {
JFrame win = new HelloWorldSwing();
win.setTitle("TextAreaDemo");
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setVisible(true);
}
}
Der Code wurde genommen von hier .
Wenn ich die Anwendung von Eclipse-laufen die erwarteten Fenster erscheint (Also, es ist gut. Ich sehe, was ich sehen will). Allerdings, wenn ich versuche, das Fenster zu schließen oder versuchen, etwas in dem Textfeld des Programm friert zu schreiben. Das Betriebssystem schreibt mir, dass Programm reagiert nicht (ich versuche, es auf Ubuntu).
Kann mir jemand helfen, den Grund des Problems zu finden?
Vielen Dank im Voraus für jede Hilfe.
Lösung
Ich bin sicher, dass dies nicht mit dem Code zu tun hat, wie andere den Code ausgeführt wird gefunden haben, ganz gut auf ihren Maschinen - was auf eine maschinenspezifische Frage. Aus Eclipse, stellen Sie sicher, dass es Setup ist die erwartete JDK / JRE zu verwenden. Doch bevor sich Gedanken darüber, wie Eclipse-Ihre Situation ist der Umgang, ich Dinge von Hand zuerst laufen würde -. Zumal man eine sehr einfache Klasse haben
Ich würde überprüfen, um sicherzustellen, dass Sie den erwarteten Compiler und Runtime verwenden. Unter Linux:
which javac
which java
Wenn sie sind beide, was Sie erwarten, gehen Sie wie folgt:
javac HelloWorldSwing.java
java HelloWorldSwing
Wenn Sie ein ähnliches Problem bekommen, dann wissen Sie, es ist nicht die Eclipse-Konfiguration und etwas ist es anders. Wenn Sie nicht die neueste JDK verwenden, ein Upgrade auf die neueste. Wenn Sie bereits auf dem neuesten sind, dann könnte es ein Display-Treiber sein. Haben andere Java-Swing-Programme arbeiten auf diesem Computer? Ich bin sicher, dass Sie einige im Netz finden können, laden Sie eine App bereits als Glas verpackt und versuchen Sie es ausgeführt wird.
Andere Tipps
haben Sie versucht, die eventdispatcherthread mit dem JFrame sehen?
so etwas wie:
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndViewJFrame();
}
});
}
public void createAndViewJFrame(){
JFrame win = new HelloWorldSwing();
win.setTitle("TextAreaDemo");
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setVisible(true);
}
dann würde der Rahmen durch den Schwenk Dispatcher-Thread angezeigt.
hoffen, es hilft, obwohl im nur raten ...
Update: als commen wies man i f ** ed up der invokeLater () -Aufruf. Ich bearbeiten gerade diesen Beitrag, das zu korrigieren. Thanx gehen zu Yishai & willcodejavaforfood für den Hinweis it out!
frank
Sie müssen das Exit-Ereignis fangen und reagiert mit einem
System.exit( 0 );
Es soll möglich sein, das finden in die meisten Swing-Beispiele online.
falsche Sachen ... sorry ... Kaffee ... argh ....