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);
        }


}

コードはhereから取得されました。

Eclipse からアプリケーションを実行すると、期待どおりのウィンドウが表示されます (これで問題ありません。見たいものが表示されます)。ただし、ウィンドウを閉じようとしたり、テキスト領域に何かを書き込もうとすると、プログラムがフリーズします。OSは、プログラムが応答していないと書いています(Ubuntuで試してみました)。

問題の理由を見つけるのを手伝ってくれる人はいますか?

よろしくお願いします。

4

3 に答える 3

1

他の人が自分のマシンでコードが問題なく動作することを発見したため、これはコードと関係があるとは限りません。これはマシン固有の問題を示しています。Eclipse 内から、予期される JDK/JRE を使用するようにセットアップされていることを確認します。ただし、Eclipse が状況をどのように処理しているかを心配する前に、まず手動で実行します。特に、非常に単純なクラスがあるためです。

期待されるコンパイラとランタイムを使用していることを確認します。Linux の場合:

which javac
which java

どちらも期待どおりの場合は、次の手順を実行します。

javac HelloWorldSwing.java
java HelloWorldSwing 

同様の問題が発生した場合、それは Eclipse 構成ではなく、別の問題であることがわかります。最新の JDK を使用していない場合は、最新のものにアップグレードしてください。すでに最新の場合は、ディスプレイ ドライバーである可能性があります。このコンピューターで他の JAVA スウィング プログラムは動作しますか? ネットでいくつか見つけて、既に 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

exit イベントをキャッチして、System.exit( 0 );

オンラインのほとんどのスイングの例でそれを見つけることができるはずです。

間違ったもの...申し訳ありません...コーヒー...うーん....

于 2010-02-17T15:07:58.293 に答える