
Ubuntu日本語フォーラム

ログインしていません。
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です.
よろしくお願いします.
オフライン
javaのバージョンを1.6にしたら何事もなかったように動きました・・
オフライン
×ボタンをクリックしてもウィンドウを閉じるようにするにはWindowListenerインターフェイスをimpleteしてwindowClosing()を呼び出します。
下記のページが役に立つかもです。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/event/WindowListener.html
javaのバージョンを1.6にして何事もなかったというのは原因はわかりませんが、WindowListenerを実装しないとダメですね。
オフライン
> 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 にしたら出来たというのはよく分かりませんが・・・。
オフライン
同じコードで、私は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を使っています。
オフライン