0

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

谁能帮我找出问题的原因?

预先感谢您的任何帮助。

4

3 回答 3

1

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

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

which javac
which java

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

javac HelloWorldSwing.java
java HelloWorldSwing 

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

于 2010-02-27T05:33:07.647 回答
0

您是否尝试使用 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);
}

然后您的框架将由摆动调度程序线程显示。

希望它有所帮助,虽然我只是猜测......

更新:正如评论者指出的那样,如果**调用了 invokeLater() 调用。我刚刚编辑了这篇文章以纠正它。感谢 yishai & willcodejavaforfood 指出来!

坦率

于 2010-02-17T15:14:22.883 回答
-2

您需要捕获退出事件并以System.exit( 0 );

您应该能够在大多数在线摇摆示例中找到这一点。

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

于 2010-02-17T15:07:58.293 回答