私が普段プログラムを書いてコンパイルすると、ほぼ確実といってもいいくらいにおかしなことが起きます。
ボタンを配置して、処理を書きます(ここではJTableが現れるという処理にします)、そしてコンパイルします、コンパイルは通ります、ウィンドウが現れます、ボタンを押したら処理が起きてJTableが現れるはずなのですが、ボタンを押すとコマンドプロンプトでわけわからん英語や数字が現れます(出力される)。
自分の書いたプログラムをeclipseでコピペしても、問題はありませんでした。
コマンドプロンプトを一度消して、直ったプログラムもあります。また、その逆に何度やっても直らないものもあります。
↓私の書いたプログラムです。おかしいところ等がありましたらご指摘下さい。また解答者様のPCでコピペして、試してみて下さい。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Sukejuru extends JFrame implements ActionListener {
JPanel p;
public static void main(String args[]) {
Sukejuru ske = new Sukejuru();
ske.setBounds(200,200,600,300);//大きさ&ウィンドウの位置
ske.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//クローズ
ske.setVisible(true);
}
Sukejuru() {
super("Myスケジュール");
JPanel p = new JPanel();
p.setBackground(Color.green);
add(p);
JButton b1 = new JButton("一月");
b1.addActionListener(this);
b1.setActionCommand("b1");
p.add(b1);
JButton b2 = new JButton("二月");
b2.addActionListener(this);
b2.setActionCommand("b2");
p.add(b2);
JButton b3 = new JButton("三月");
b3.addActionListener(this);
b3.setActionCommand("b3");
p.add(b3);
}
public void actionPerformed(ActionEvent e) {
JTable table = new JTable(5,5);
JScrollPane sp = new JScrollPane(table);
p.add(sp);
}
}
No.4ベストアンサー
- 回答日時:
先人曰く 「プログラムは『思った通り』に動かない。
『書いた通り』に動く」過去の質問でもありましたが、
・インスタンス変数/インスタンスメソッド
・static変数/staticメソッド
・ローカル変数
これらの違いが十分に理解できてないのではないでしょうか?
まずは
public class Sukejuru extends JFrame implements ActionListener {
JPanel p;
を
public class Sukejuru extends JFrame implements ActionListener {
JPanel mainPanel ;
にしてみてください。変えるのはこの1箇所だけです。他は変えないこと。
インスタンス変数pがインスタンス変数mainPanelに変わったので、インスタンス変数pを使っているところでは、変数pが未定義となり、コンパイルエラーになります。
が、変数pを使っているのにエラーにならない箇所があるはずです。
その変数pはSukejuruクラスのインスタンス変数ではない、ということです。
あなたは「インスタンス変数p」だと「思って」いるかもしれませんが、実際にはそのように「書かれて」いない、ということです。
インスタンス変数、インスタンスメソッドが理解できていないのなら、省略できる this. を省略しないのもよいでしょう。
どれがインスタンス変数/メソッドか意識することが大事です。
この回答への補足
本当に回答ありがとうございます。
私のためにこんなに、多く回答をしてい頂いて、感謝です。
私は、「java e本」というものでjava入門し、GUIjが作りたかったので、「javaコンポーネント完全制覇」というのを勉強中です。
しかし、読んでくうちに、この本が私と思っていた方向性を見失ったので下記のURLのサイトで勉強し始めました。サイトに、買い手内のか、私が読飛ばしたのどっちかですが、私はやはり未熟で【ローカル変数】や、【インスタンス変数】や、【static変数、staticメソッド】を聞いたことありません。そのため、補足を書かせていただきました。
下記URL http://www.javadrive.jp/tutorial/
mainPanelにかえたところ、JButtonにはコンパイルエラー(シンボルが見つかりません)になりました。
何か自分が勉強したらいいもの、書籍、サイトがありましたらお教えよろしくお願いいたします。
No.3
- 回答日時:
質問のプログラムは文法的に正しく,振る舞いが間違っています.
p.add(sp);
の行を次のように置き換えてコンパイル・実行すれば,おかしい部分を突き止める手がかりになるかと.
System.out.println("DEBUG: p = " + p);
調べてもnullになる理由が分からないという話であれば,改めてそう質問された方がよいと思います.「わけわからん英語や数字が現れます」という点に対しては,wormholeさんと同様によく考えてください,という方向の話になってしまいます.
この回答への補足
やはり、私は勉強不足なようで、さっぱりです。
なので、私がこれから勉強したらいいもの、書籍、サイトをお教えください。
お願いします。
No.2
- 回答日時:
>私のプログラムがおかしくて、でも文法的にはあっている。
>つまりは何がおかしいのですか?
ヒントは与えてるんだからご自分で考えてください。
日本語だって英語だって文法的には間違ってないけど文章的や内容的にはおかしいとかあるじゃないですか。
例えば1~10の和を求めるプログラムを作ろうとしたとします。
めんどうなのでクラスとかmainとか書きませんけど。
int sum = 0;
sum *= 1;
sum *= 2;
sum *= 3;
sum *= 4;
sum *= 5;
sum *= 6;
sum *= 7;
sum *= 8;
sum *= 9;
sum *= 10;
コンパイルでエラーも警告も出ないと思います。
では上記は1~10の和を求めるプログラムとして正しいと思いますか?
No.1
- 回答日時:
>ボタンを押すとコマンドプロンプトでわけわからん英語や数字が現れます(出力される)。
通常それは書かれたプログラムに何らかの問題があるからです。
コンパイルでエラーや警告がなかったからといって、それは構文的な話であってロジック的な部分についてはエラーや警告はしてくれません。
「わけわからん英語や数字」なんていってないで、それを理解する努力をしてください。
で、実行してボタンを押してみた結果。
43行目(actionPerformed()のp.add(sp))で何かの値がnull。
ヒントはここまで、ここから先は何がnullなのか、なぜそれはnullなのかよく考えてみてください。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Sukejuru.actionPerformed(Sukejuru.java:43)
(略)
この回答への補足
ロジック?!
私のプログラムがおかしくて、でも文法的にはあっている。
つまりは何がおかしいのですか?
自分はまだまだなため理解不能です。構文以外に注意しなければいけないこととは?回答者様のおっしゃることは、何のことをおっしゃているのですか?プログラムを書き直さなければならないということは、構文がおかしいということではないのですか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
フォームの存在をチェックする方法
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
C#の構造体の開放のしかた
-
VB6.0で、DLLを動的に参照したい
-
c++の課題で クラスのオブジェ...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
C#において、同じインスタンス...
-
vb.netでFAXを送信する方法
-
Delphiでインスタンスが作成さ...
-
String a = "a"; と String b =...
-
SerialPort処理でInvokeメソッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報