プロが教える店舗&オフィスのセキュリティ対策術

コマンドプロンプトを実行すると以下のようなエラー文が出ました。

Exception in thread "main" java.lang.IllegalArgumentException: cannot add to lay
out: unknown constraint: Canter
at java.awt.BorderLayout.addLayoutComponent(Unknown Source)
at java.awt.BorderLayout.addLayoutComponent(Unknown Source)
at javax.swing.JRootPane$1.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at calendar.<init>(calendar.java:49)
at calendar.main(calendar.java:78)

本などで、自分なりに調べたのですが解決できずに困っています。

原因が分かる方、いらっしゃいましたらご回答いただけますか?

A 回答 (2件)

#1の補足


綴りミスの場所はcalendarクラスのコンストラクタの中(calendar.javaの49行目前後)と思われ。
ただ、そこが最初にエラーを引き起こした箇所というだけで他の場所にはミスがないとは言い切れないが。
    • good
    • 0

"Canter"でなく"Center"。



GUI部品をGUIコンテナにaddする時に、

コンテナ.add(部品, "Canter") // Centerの綴りミス
// もっと大昔の書き方なら、コンテナ.add("Canter", 部品)かもだけど、さすがにこれはないと思う

のようにしているのだろうと思う。
# コンテナがthisなら「コンテナ.」は省略されているかもしれない。
文字列で直接部品の場所を指定する書き方ではコンパイラは文字列の綴りまではチェックできないので、
実行時に綴りの間違いでエラーが出るまで今回のようなミスに気が付かない。

コンテナ.add(部品, BorderLayout.CENTER)

のようにレイアウトマネージャクラス自身が定義した定数を使うようにすれば、
BorderLayout.CENTER を BorderLayout.CANTER と書き間違えた時に、
コンパイラがそんなものは定義されてないというエラーを出してくれる。

今回のように実行時にエラーが出るケースならまだエラー出力から原因を特定しやすいが、
下手をすると実行時エラーすら出ずに妙な動作が行われるようなケースもあるので、
コンパイル時にコーディングのミスを発見できるようにすることは重要。
    • good
    • 0

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