開発環境
IDE: Eclipse photon 4.8
MacBook: Catalina 10.15.7
言語: java8
閉じるボタンでウインドウを閉じるためのコード
addWindowListener(new WindowAdapter() {
// @SuppressWarnings("unused")
public void windowClosing (WindowEvent e) {
dispose();
System.exit(0);
}
});
@SuppressWarnings("unused")
のところは、Eclipseが提案してきたコメント。これを挿入すればエラーは表示されなくなったけど、使用していないよと明示してJVMに教えたげてるので、使われていない変数があってもエラーとして認識しなくてもいいよ。書いた人もわかっているよ
ということでエラーを表示させなくするためのコメント。
つまり、解決してないってこと!
当然、ウインドウを閉じることはできない。でも教材通りに書いてるつもりなんだけど。
Eclipseに頼ってたらちゃんと理解できない
// この部分でエラーが発生
public void windowClosing (WindowEvent e) {
Eclipseのエディターにはcom.sun.glass.events.WindowEventをインポートする
っていう提案が一番上に出てきたので、import文を追加しました。
import com.sun.glass.events.WindowEvent;
これが元凶でした。
次に表示されたエラーが
型 new WindowAdapter(){} からのメソッド windowClosing(WindowEvent) はローカルで使用されません
Eclipseの言われた通りに修正したのにあかんやん。どゆこと?
上のエラーを簡単に言ったらメソッドの使い方がちゃうよ
ってことだけど、、、なんでEclipseの言った通りにやったのにさ、解決してへんやんって感じでした。
そこから次のようなコメントを挿入することが提案される
@SuppressWarnings("unused")
いや、これって、使ってないよって話じゃん。。。
んで教材をみて、サンプルと比較しても該当する部分は完全に一致しているように見える。サンプルの該当部分をコピペして貼り付けても同じエラーが起こるので、スペルミスや、見えないコードが混じり込んでいることも考えられないし。。。。
というのでどんどん沼にハマって行きました。。。。
同じ名前のクラスが異なるパッケージに複数ある
また最初のエラーが出ている状態のコードに戻して、Eclipseに表示される提案部分を確認したら、スクロールして下の方にも別の提案がありました。
そこにjava.awt.Eventをインポートする
っていうような提案がありました。
ひょっとしてそれじゃねぇのか?って思ったらビンゴでした。
経験が浅いとEclipseの一番上に出てくる提案部分を採用して修正すればいいんじゃないか
と思っていたのが間違い。だめ絶対。
結局インポート文が間違っていた
import java.awt.Event;
とすれば一瞬で解決しました。
じゃあcom.sun.glass.WindowEventはなんなの?
ここにありました。違うパッケージにあるんですね。ややこしい。
結局これでめっちゃ時間がかかってしまった。。。。
2時間くらいかかったけど実りはあったかなと
エラーの解決手順が身についた?
これは自分で思っていることですけど、
- Eclipseに頼りっきりにしない
- 公式ドキュメントを確認する
- ググってみて英語のページしかでてこないけど、ちゃんと読む
- JREライブラリを確認するようになった
- スペルミス以外のミスの経験が得られた
- 自分で解決した経験が得られた
たかだかインポート文が間違っていたというしょうもないミスだったのに2時間くらいかかってしまったのはアホらしいですけど、こういう経験が身になるのかなと信じています。
基本的にはエラーは自分で解決できていますが、やっぱり同様のエラーが出てきた時には教えてもらったことよりも解決するのが断然早い。
そして、なんとなくエラー解決の手順が自分なりに形になってくるので、新しいエラーに関しても手順自体は生かせるかなと感じました。