重複エラーを解決する方法

このQ&Aのポイント
  • 重複エラーが発生し、エラーメッセージによるとCanvasクラスの定義が重複しているとのことです。
  • 現在コンパイルしているファイルで、Canvas.javaと○.javaでの定義が重複しているのかを確認しましたが、二つのファイルが現在コンパイルしているファイル自身でした。
  • このエラーが出るようになる前に行った作業で、一度Canvas.javaを削除して再び作成し直したことが原因で、どこかにbackupfileが作成されてしまった可能性があります。
回答を見る
  • ベストアンサー

重複エラーを解決するには

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

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.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() のどちらとも取れるため、「どっちなのかはっきりしろ」というメッセージが 出るはずです。

maruokundesu
質問者

お礼

度々、ありがとうございます。 JBuilderを使っている為か… package文に相当しそうな文では、「package keisan;」 としか記述していません。次の行に続くのは、import文で す。 1番と2番については、前述のような現状です。 3番に書いて頂いたことは、まさに当てはまって いました。 4番目のことは、該当していませんでした。 このように回答頂き、大変勉強になります。 ありがとうございました。

その他の回答 (1)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

推測で申し訳ないのですが、 ご質問のエラーメッセージはクラスを特定出来ないために 出ているのだと思います。 具体的には、Canvasというクラスが出現したときに、 自作のクラスだと思われるCanvas.javaと、java.awt.Canvas のどちらかわからないのだと思います。 はっきりさせるには、 1.正確なエラーメッセージ(ファイル名、行番号は必須) 2.Canvas.javaのpackage文 3.エラーがでたファイルの、package文及び、全てのimport文 を教えてください。

maruokundesu
質問者

お礼

推測でも,十分今後の参考にもなり,勉強になりました。 実は… 数分前に,Canvas.javaのプログラムを操作した後, コンパイルしてみた所,なぜかエラーが消えたのです。 (何の関係もなさそうな部分っだったのですが。) 大変感謝しております。ありがとうございました。 今後もよろしくお願いします。 ところで,package文とは,どのような文を指すの でしょうか?javaファイルのどの部分に書いてある ものなのでしょうか?まだ勉強をし始めたばかりで すみません。教えて下さい。

関連するQ&A

  • シンボルを解決できません(初心者)

    一つのプログラムに対して、いくつかのファイルに分けて 記述されているとき、 たとえば、ファイル A.java と B.java があって 【A.java】 package shop;  ・  ・  public class Shop {   ・   ・   ・ } 【B.java】 packeage shop;  ・  ・ public class Buy(Shop shop){ } という感じで、A.java内で定義したクラス型を他のファイルで使うと、 コンパイル時に、「シンボルを解決できません」というコンパイルエラーが出て コンパイルできません。 こういう場合はどうすれば、良いのでしょうか? 初心者なので、非常に初歩的な質問かと思いますがよろしくお願いします。

    • ベストアンサー
    • Java
  • 同一パッケージにあるクラスが見つからないエラー

    Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。 tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。 C:\(中略)\mangasearch>javac tagsrch.java tagsrch.java:11: エラー: シンボルを見つけられません public static List<manga> searchByKey(String k[]) throws IOException{ ^ シンボル: クラス manga 場所: クラス tagsrch tagsrch.java:14: エラー: シンボルを見つけられません manga[] list = new manga[cnum]; 同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。 ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。 初歩的質問で申し訳ありませんが、よろしくお願いいたします。 -参考- 1.いろいろ試したこと  1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。  eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。  1-2.クラスパスを入れてコンパイルしてみる。  同一パッケージ内なので、この必要はないはずですが、  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。   下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。  1-1.1-2.の参考URL:http://okwave.jp/qa/q2520327.html  1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。  分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。 publicつけたままだと、 C:\(中略)\mangasearch>javac mangalist.java mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣 言する必要があります となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。 org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。 2.mangalist.java/tagsrch.javaについて mangalist.javaのコンパイルはできています。 mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。 ■mangalist.java package mangasearch; class manga{ フィールド名 ・・・    manga(){    //コンストラクタ    } } ■tagsrch.java public class tagsrch extends manga{ メソッド{     } }

    • ベストアンサー
    • Java
  • [Java]RMIのコンパイルエラー

    JAVA RMI をしています。 スタブとスケルトンを作成する為、rmicコンパイラを使用しようとするとエラーがでました。 手順は 1.コマンドプロンプトで、クラスファイルとソースファイルが存在するフォルダに移動 2.Remoteインターフェースを作成 3.Remoteオブジェクトを作成 4.2.と3.をコンパイル 5.rmicコマンドでコンパイル ***結果***************************************** rmic pack.RemoteObj error: クラス pack.RemoteObj が見つかりません。 ************************************************ こんな感じになります。 備考として... ・javaは1.4.1_01を使用しています ・コンパイルは通りました ・rmic.exeにパスは通ってます ・クラスファイルも生成されています ・packはパッケージです どこのサイトでも書かれている手順を踏みました。 他に何か原因として考えられることはあるでしょうか??

    • ベストアンサー
    • Java
  • エラー解決方法が分かりません。。

    こんにちは、私は最近JAVAプログラミングを始めたのですが、コマンドプロンプトでコンパイルを無事に終えたあと、クラスファイルを指定して実行しようとすると必ず「Exception in thread "main" java.lang.NoClassDefFoundError: Hello」と表示されて実行できません。他サイトで調べたところこのエラーはHello.classの場所が分からないというものだということまで分かったのですが、解決策がよく理解できませんでした。あらかじめ環境変数のpathを変更して行っているんですが、コマンドプロンプトでどのように入力したらエラーが無くなるでしょうか?ご助言よろしくお願いします。

    • ベストアンサー
    • Java
  • エラーの原因がわかりません。

    パッケージdiglibに含まれているTriangleクラスとパッケージdigに含まれているCalcDigクラスを用いて三角形の面積を表示するプログラムについてです。 (CalcDigがメインクラスです。) javac dig¥CalcDig.javaでコンパイルしたところエラーなくできたのですが、 java dig.CalcDigで実行したところ、 「エラー:メイン・クラスdig.CalcDigを検出およびロードできませんでした。」 と表示されました。 何が原因なのでしょうか? digフォルダにCalcDigのjava,classファイルを、diglibフォルダにTriangleのjava,classファイルを入れています。

  • JBuilderでのJDKバージョンアップ

    JBuilder5 professionalを使用しています。 あるサンプルを再現しようと思い、作業しているのですが そのサンプルはJDK1.4.0Beta2で作られているとのこと。 私の使っているJDK(1.3.2)も同様にしようと思い、 JDK1.4.0Beta3をインストールし、設定したのですが、 コンパイル時、下記の警告がでてしまいます。 -------------------------------------------------------------------------- 警告 #: 910 : クラス java.lang.Object;クラスファイルのバージョンが不正です:       48.0; をチェックできません. java.lang パッケージがステーブルである       ことが想定されます。-nomakestable の使用をお勧めします 警告 #: 910 : クラス CardMakerServlet;クラスファイルのバージョンが不正です:       48.0 はインポートに問題があります; をチェックできません. .       パッケージがステーブルであることが想定されます。-nomakestable の使用を       お勧めします -------------------------------------------------------------------------- JDKの設定をJBuilderでかえただけなんですが、 ほかに設定しないといけないことがあるのでしょうか? 教えてください。

  • エラーがでます><

    KNOPPIXでjavaのファイルをコンパイルしようとすると、 (例)javac test.java として、コンパイルすると test.java:0: error: Can't find default package `java.lang'. Check the CLASSPATH environment variable and the access to the archives というエラーがでます。 一応、標準で、OSにコンパイラが入っていると思うのですが、 どうしたらいいのでしょうか??? よろしくお願いしますm( )m

  • java import文のエラー

    javaのソースで、パッケージをimportして使用するための簡単なサンプルを作成しました。 import文でクラス名まで指定すれば問題ないのですが、*を利用するとコンパイルエラーとなってしまいます。 コンパイル時にクラスパスを指定するのかと思って試してみましたが、やはりエラーでした。 回避方法をご存知の方いらっしゃいましたら、教えていただけますでしょうか。 なお、java/javacは、1.5.0_14を使用しています。 ■ソースコード(1) <C:\Work\Test\PackTest.java> package Test; public class PackTest{   public static void methodA(){     System.out.println("パッケージ成功");   } } ■ソースコード(2) <C:\Work\UsePack.java> import Test.*;     //import Test.PackTest; なら成功 class UsePack{   public static void main(String args[]){     PackTest.methodA();   } } ■エラー例(1) >javac -d . PackTest.java (これは成功) >javac UsePack.java   UsePack.java:5: PackTest にアクセスできません。   クラスファイル .\PackTest.java は不正です。   ファイルにクラス PackTest が含まれていません。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。     PackTest.methodA(); ■エラー例(2) >javac -d . PackTest.java (これは成功) >javac -classpath C:\Work\Test UsePack.java   UsePack.java:1: パッケージ Test は存在しません。   import Test.*;   ^   UsePack.java:5: PackTest にアクセスできません。   クラスファイル C:\Work\Test\PackTest.class は不正です。   クラスファイル Test.PackTest に不正なクラスがあります。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。      PackTest.methodA();      ^

  • パッケージ関連のエラー

    パッケージが含まれるプログラムでのエラーの要因は何がありますか? コンパイルはできたんですが、 エラー:メイン・クラスdig.CalcDigを検出およびロードできませんでした。 と表示されます。 何度も見返しましたが、 ソースコードに書かれたパッケージと同じフォルダに入れてある 名前も間違ってない java フォルダ名.メインクラス名で実行している です。

  • Beanクラスのimportについて

    Beanクラスを作成し、そのBeanクラスをServletでimportしたいのですがコンパイルするとエラーになってしまいます。 Bean(TestBean.java)をsampleパッケージに保存してコンパイルした後に Servlet(Test.java)を ----------------------------------------------- import sample.TestBean; import javax.servlet.*; ・・・・・・・ ・・・・・・・ ------------------------------------------------ として、sampleファイルのひとつ上のディレクトリーに保存してコンパイルすると Test.java:1: シンボルを解釈処理できません。 とエラーになってしまいます。 原因がお分かりになるかた、ご教授をお願いできないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう