アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
次のようなエラーが出て困っています。

”パッケージ名.Canvasクラスの定義が重複しています。
 すでにCanvas.javaと○.javaで定義されています。”

そこで、
1,現在コンパイルしているファイルで、Canvas.java
  と○.javaでの定義が重複しているのかを確認しました。
  しかし、その二つのファイルが、現在コンパイルしているファイル自身でした。
2,Canvas.javaと○.javaのプログラムの中身を見ました。
  しかし、Canvasクラスを定義していたのは片方だけでした。
3,このエラーが出るようになる前に行った作業(一度、Canvas.javaを削除して
  再び作成し直した)ことが原因で、どこかにbackupfileが作成されてしまった。
→解決できず

JBuilderを使っています。どうしたら解決できるのか、教えて下さい。お願いします。

A 回答 (2件)

package文というのは、クラスのパッケージ名を定義するもので、


記述する場合は、必ずプログラムの先頭に記述しなければなりません。
(コメントは除く)


例えばTextFieldクラスは、正式には

java.awt.TextField

というクラス名ですが、このソースファイルの先頭には

package java.awt;

という文が記述されているはずです。



ついでに言っておきますと、当初の推測では、

1.Canvas.javaではpackage文を記述していない。
2.○.javaでもpackage文を記述していない。
3.○.javaで「import java.awt.*;」の記述がある。
4.○.javaでCanvasクラスを使っている(Canvas cv = new Canvas()のように)

だと思いました。推測があっているなら、次のような理由でエラーになります。


import文をjava.awt.*のように記述すると、コード内で出現したクラスは、
そのパッケージ名が省略されたものと判断されます。

従って、「Canvas cv = new Canvas()」の記述は、

(パッケージ無し)Canvas cv = new (パッケージ無し)Canvas()

java.awt.Canvas cv = new java.awt.Canvas()

のどちらとも取れるため、「どっちなのかはっきりしろ」というメッセージが
出るはずです。
    • good
    • 0
この回答へのお礼

度々、ありがとうございます。

JBuilderを使っている為か…
package文に相当しそうな文では、「package keisan;」
としか記述していません。次の行に続くのは、import文で
す。

1番と2番については、前述のような現状です。
3番に書いて頂いたことは、まさに当てはまって
いました。
4番目のことは、該当していませんでした。

このように回答頂き、大変勉強になります。
ありがとうございました。

お礼日時:2003/11/08 12:56

推測で申し訳ないのですが、


ご質問のエラーメッセージはクラスを特定出来ないために
出ているのだと思います。


具体的には、Canvasというクラスが出現したときに、
自作のクラスだと思われるCanvas.javaと、java.awt.Canvas
のどちらかわからないのだと思います。


はっきりさせるには、

1.正確なエラーメッセージ(ファイル名、行番号は必須)
2.Canvas.javaのpackage文
3.エラーがでたファイルの、package文及び、全てのimport文

を教えてください。
    • good
    • 0
この回答へのお礼

推測でも,十分今後の参考にもなり,勉強になりました。

実は…
数分前に,Canvas.javaのプログラムを操作した後,
コンパイルしてみた所,なぜかエラーが消えたのです。
(何の関係もなさそうな部分っだったのですが。)

大変感謝しております。ありがとうございました。
今後もよろしくお願いします。

ところで,package文とは,どのような文を指すの
でしょうか?javaファイルのどの部分に書いてある
ものなのでしょうか?まだ勉強をし始めたばかりで
すみません。教えて下さい。

お礼日時:2003/11/06 13:40

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

このQ&Aを見た人はこんなQ&Aも見ています