繁体   English   中英

为什么我的基于Swing的GUI应用程序没有响应?

[英]Why my Swing based GUI application is not responding?

我正在尝试使用(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上尝试了)。

有人可以帮助我找到问题的原因吗?

预先感谢您的任何帮助。

我确信这与代码无关,因为其他人发现代码在他们的机器上运行得很好-这表明了特定于机器的问题。 在Eclipse中,确保已设置为使用预期的JDK / JRE。 但是,在担心Eclipse如何处理您的情况之前,我会先手动运行-尤其是因为您有一个非常简单的类。

我将检查以确保您使用的是预期的编译器和运行时。 在Linux上:

which javac
which java

如果它们都是您所期望的,请执行以下操作:

javac HelloWorldSwing.java
java HelloWorldSwing 

如果您遇到类似的问题,那么您就知道它不是Eclipse配置,而是其他配置。 如果您没有使用最新的JDK,请升级到最新的。 如果您已经是最新的,则可能是显示驱动程序。 其他JAVA swing程序在这台计算机上可以工作吗? 我相信您可以在网上找到一些内容,下载已经打包为jar的应用程序,然后尝试运行它。

您是否尝试使用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调度程序线程显示。

希望它有所帮助,尽管我只是在猜测...

更新:评论者指出您是否**调用invokeLater()。 我只是编辑了这篇文章以纠正它。 谢谢去yishai&willcodejavaforfood指出这一点!

坦率

您需要捕获退出事件并使用System.exit( 0 );响应System.exit( 0 );

您应该能够在大多数在线示例中找到它。

错误的东西...对不起...咖啡...啊...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM