簡體   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