お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-10-29 21:29:59

jikishin
新しいメンバ
登録日: 2009-10-29

javaのswingでウインドウが反応しません

Ubuntu上でjavaの勉強をしている者です.

GUIを使ってみたかったのでswingを使ってみようと思いウインドウを表示し、
×ボタンをクリックして終了するプログラムを動かしてみました.
ssample1_1という名前をつけたフォルダに
*******************************************************
package ssample1_1;
import javax.swing.JFrame;

class SSample1_1 extends JFrame{
    //private static final long serialVersionUID = 1;
   
    SSample1_1(String title){
            setTitle(title);
            setBounds(100, 100, 300, 250);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          }

    public static void main(String[] args) {
            SSample1_1 frame = new SSample1_1("sample");
            frame.setVisible(true);

          }
    }
*************************************************************
を書いたSSample.javaを端末からclassファイルに変換し実行しました.

するとタイトルバーにsampleと書かれたウインドウは表示されるのですが
Xボタンを押しても(クリック時されたグラフィックにはなるのですが)プログラムを終了することができません.
その後放置しておくと「”sample"から応答がありません」というダイアログが出てきます.

eclipseで同様のプログラムを実行しても同じ結果でした
javaのバージョンは1.5.0です.
よろしくお願いします.

オフライン

 

#2 2009-11-02 10:19:30

jikishin
新しいメンバ
登録日: 2009-10-29

Re: javaのswingでウインドウが反応しません

javaのバージョンを1.6にしたら何事もなかったように動きました・・

オフライン

 

#3 2009-11-20 13:59:54

eng16danbo
メンバ
From: 東京都八王子市
登録日: 2007-08-03

Re: javaのswingでウインドウが反応しません

×ボタンをクリックしてもウィンドウを閉じるようにするにはWindowListenerインターフェイスをimpleteしてwindowClosing()を呼び出します。
下記のページが役に立つかもです。

http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/event/WindowListener.html

javaのバージョンを1.6にして何事もなかったというのは原因はわかりませんが、WindowListenerを実装しないとダメですね。

オフライン

 

#4 2009-11-20 18:57:50

epii
メンバ
登録日: 2008-12-11

Re: javaのswingでウインドウが反応しません

> eng16danbo さん
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); とあるので要らないんじゃないでしょうか・・・?

コード:

    protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);

        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            switch(defaultCloseOperation) {
              case HIDE_ON_CLOSE:
                 setVisible(false);
                 break;
              case DISPOSE_ON_CLOSE:
                 dispose();
                 break;
              case DO_NOTHING_ON_CLOSE:
                 default:
                 break;
              case EXIT_ON_CLOSE:
                  // This needs to match the checkExit call in
                  // setDefaultCloseOperation
                System.exit(0);
                break;
            }
        }
    }

↑ こんな感じで終了してくれるみたいですし・・・。 (JFrame.java の Line 295 あたりです)

# 尤も 1.6 にしたら出来たというのはよく分かりませんが・・・。

オフライン

 

#5 2009-12-03 02:58:57

tener
新しいメンバ
登録日: 2009-12-03

Re: javaのswingでウインドウが反応しません

同じコードで、私はjavaのバージョンを1.6.0_16にしてもeclipseではjikishinさんと同じ現象がおきます。
端末から実行したときは何の異常もありません。
ちなみにepiiさんとかぶりますが、次のようなコードに書き換えて実行してみても
「”sample”から応答がありません」というダイアログが出て終了できません。

コード:

import javax.swing.*;
import java.awt.event.*;

class test extends JFrame implements WindowListener{
    private static final long serialVersionUID = 1;
    JFrame frame;
   
    test(String title){
            setTitle(title);
            setBounds(100, 100, 300, 250);
            addWindowListener(this);
          }
    
    public void windowActivated(WindowEvent e) {
    }
    public void windowClosed(WindowEvent e) {
        System.exit(0);
    }
    public void windowClosing(WindowEvent e) {
        dispose();
    }
    public void windowDeactivated(WindowEvent e) {
    }
    public void windowDeiconified(WindowEvent e) {
    }
    public void windowIconified(WindowEvent e) {
    }
    public void windowOpened(WindowEvent e) {
    }
    
    public static void main(String[] args) {
        test frame = new test("sample");
            frame.setVisible(true);

          }
    }

おそらくeclipseの問題なのかな、と。
https://wiki.ubuntulinux.jp/UbuntuTips/Application/EclipseJapaneseSetup
eclipseはここ↑を参考に昨日インストールしたものでOSはubuntu9.04を使っています。

オフライン

 

Board footer

Powered by FluxBB