Javaを勉強中の初心者なのですが、
ダイアログボックスの出し方を教えて頂きたいのです。

Java入門にサンプルがあったので、その通り入力し実行したところPCが止まっちゃいました。なぜでしょうか?

それと下のサンプルの中に書いてある
ユーザークラスとは何でしょうか?

よろしくお願いいたします。

ーーーサンプルソースーーー
import java.awt.*;
public class myDialog extends Dialog{
public myDialog(Frame parent){
super(parent,"My Dialog",true);
}
public void init(String s){
setSize(300,150);
setVisible(true);
}
}

作成したユーザークラスを呼び出すには次のようにします。
myDialog d;
d=new myDialog(new Frame());
d.init("ウェイトの合計が100になっていません!!");

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちわ



PCが止まった・・・と言うことは、メモリが足りないのかなあ。

開発環境を教えていただけると、調査方法もわかるかもしれません。
どういったソフトでJavaのソフトを作成し、実行しているのか。

コンソール画面(真っ黒のウィンドウ)が出て、
そこに何やらメッセージがずらずらと出てたりしませんか?
とりあえず、Javaの入門教室のようなページがありましたので、
参考にしてみてください。

それと、「ユーザークラス」についてですが、
これは「ユーザー(が作成した)クラス」と言うことです。
上記の例ですと、「myDialog」と言う名前のクラスは
始めからは用意されていません。
始めから用意されている「Dialog」と言う名前のクラスを
ベースにして作成されたオリジナルのクラスです。

これを「継承」と呼んで・・・と説明は出来ますが、
まずは用意されている部品(クラス)だけを使って
Javaを覚えてみましょう。

僕のお勧めの本は「独習Java」です。

頑張ってください。

参考URL:http://www.netjoy.ne.jp/~tuya/JavaTutor/
    • good
    • 0
この回答へのお礼

お返事頂きありがとうございました。

何とかできました。
これからも日々精進いたします。

それとこれからは
使用環境とソフト名を書くようにします。

お礼日時:2001/08/24 17:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

Qアプレットのinitは、なせ"public void init()とかくのでしょうか

java初心者です、宜しくお願いします。
javaのコンストラクターについて質問致します、宜しくお願いします。

アプリケーションのコンストラクターは、"public *****(){}"
となりますが、

アプレットのinitは、"public void init(){}"となるのはどのような理由から
でしょうか。

参考書等を色々検索しましたが、ヒットしませんでした、宜しくお願いします。

Aベストアンサー

通常のクラスでは、初期化処理は new をした時のコンストラクタで行いますが、
画面に表示する部品のようなクラスでは、初期化処理のタイミングが異なります。

init の説明
https://docs.oracle.com/javase/jp/8/docs/api/java/applet/Applet.html#init--

説明を読むと、アプレットはブラウザとかビューアによって new されます。
恐らくその後でセキュリティー的な諸設定を行ない、
端末がスリープ状態とか画面が非表示とかでないタイミングを待ってから、
ようやくユーザーによる初期化処理を認めているのでしょう。

というわけで、コンストラクタで初期化させたくない、なにか特別な事情があるクラスの場合は、
コンストラクタとは別に init とか initialize とか configurate などのメソッドを用意することがあります。

QDisplay.setCurrent((Frame)new MainPanel(this));について

http://allabout.co.jp/internet/java/closeup/CU20070419A/index4.htm

MainPanel(IApplication ap) {
this.iapp = ap;
としていますが、
MainPanel() {
this.iapp = IApplication.getCurrentApp();
これでいいと思います。
大きいプロジェクトをやっていると、後者の方法ではまずくなるのでしょうか?

Aベストアンサー

getCurrentAppを使ってもいいと思いますよ。要するに「どっちが正しい」ということでなくて、これはさまざまな書き方ができる部分ですから、人によってやり方がいろいろある、というだけのことじゃないですか。

URLの記事を見ましたが、これはEclipseのプラグインでプロジェクトを作るとこういうソースコードが自動生成されるみたいですね。それでそのまま使ってるだけじゃないですか。特に深い意味はないように思いました。


人気Q&Aランキング

おすすめ情報