Java 为什么我的基于Swing的GUI应用程序没有响应?
我正在尝试使用(Java+Eclipse+Swing)创建我的第一个GUI应用程序。这是我的代码:Java 为什么我的基于Swing的GUI应用程序没有响应?,java,eclipse,user-interface,swing,freeze,Java,Eclipse,User Interface,Swing,Freeze,我正在尝试使用(Java+Eclipse+Swing)创建我的第一个GUI应用程序。这是我的代码: import java.awt.*; import javax.swing.*; public class HelloWorldSwing extends JFrame { JTextArea m_resultArea = new JTextArea(6, 30); //============================================
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);
}
}
代码取自
当我从Eclipse运行应用程序时,会出现预期的窗口(因此,这很好,我看到了我想要看到的)。但是,当我试图关闭窗口或试图在文本区域中写入内容时,程序冻结。操作系统告诉我程序没有响应(我在Ubuntu上试用)
有人能帮我找出问题的原因吗
提前感谢您的帮助
您需要捕获退出事件并
用系统响应。退出(0)代码>
你应该能在这本书中找到
大多数swing示例都是在线的
错误的东西。。。很抱歉咖啡argh….是否尝试使用eventdispatcherthread查看JFrame
比如:
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);
}
然后,您的帧将由swing dispatcher线程显示
希望有帮助,虽然我只是猜测
更新:正如评论员指出的那样,我取消了invokeLater()调用。我只是编辑了这篇文章来纠正这一点。Thanx去益海和willcodejavaforfood为你指出它
frank我确信这与代码无关,因为其他人发现代码在他们的机器上运行得很好-这表明了一个特定于机器的问题。在Eclipse中,确保设置为使用预期的JDK/JRE。然而,在担心Eclipse如何处理您的情况之前,我会先手动运行—特别是因为您有一个非常简单的类
我会检查以确保您使用的是预期的编译器和运行时。在Linux上:
which javac
which java
如果两者都符合您的期望,请执行以下操作:
javac HelloWorldSwing.java
java HelloWorldSwing
如果您遇到类似的问题,那么您知道这不是Eclipse配置,而是其他问题。如果您没有使用最新的JDK,请升级到最新版本。如果你已经在最新的,它可能是一个显示器驱动程序。其他JAVA swing程序在这台计算机上工作吗?我相信你可以在网上找到一些,下载一个已经打包成jar的应用程序,然后试着运行它。不应该JFrame。在关闭时退出解决这个问题?这是个错误的建议,因为你在JFrame的销毁方法中有一些逻辑,调用System时不会执行它。EXIT()我尝试了提供的代码,效果很好。。。你还有别的事吗?当你注释掉构造器的内容,得到一个空的JFrame
,并试图关闭它时,它会起作用吗?这与代码无关。它在我的windows机器上运行良好。按预期关闭并写入。你们不是在使用测试版jvm吗?我试着注释这行代码:content.add(scrollingArea,BorderLayout.CENTER);我仍然有同样的问题。一个空窗口出现,它也没有响应。Oso,我想(我不确定)问题是在我安装Eclipse之后出现的。在此之前,我能够编译和执行(都是从命令行)给定的代码。我在Ubuntu上通过“sudogetapt”获得了Java开发工具包。所以,我认为它应该是一个经过测试且稳定的版本。如果从命令行运行它,它能工作吗?我用“javac HelloWorldSwing.java”编译它,用“java HelloWorldSwing”运行它,它在Ubuntu、Mac OS X和Debian上运行良好。这不是调用invokeLater方法的方式。SwingUtilities.invokeLater(新Runnable(){public void run(){createAndViewJFrame()});我做了建议的更改。但是,我引入了一些小的更改。首先,我将createAndViewJFrame声明为“静态”(否则main会抱怨:无法对非静态方法进行静态引用)。其次,我交换了“createAndViewJFrame”和“main”(我希望如果没有关系的话)。不幸的是,它没有解决问题。我的申请仍然没有响应。