Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的基于Swing的GUI应用程序没有响应?_Java_Eclipse_User Interface_Swing_Freeze - Fatal编程技术网

Java 为什么我的基于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); //============================================

我正在尝试使用(Java+Eclipse+Swing)创建我的第一个GUI应用程序。这是我的代码:

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”(我希望如果没有关系的话)。不幸的是,它没有解决问题。我的申请仍然没有响应。