2011-02-09 12 views
2

私が最近作成したクラスのインスタンスを作成するコードをコンパイルしようとするたびに、このJavaコンパイルエラーが発生しました。私は手動でコンパイルしようとしましたが、別の場所からコンパイルして、セーフモードでコンパイルしようとしました。私はまた、コンピュータにJavaを完全に再インストールしました。ここで私が書くコードと私は常に取得エラーの例です:
インスタンス作成者クラス:Javaによって作成されたオブジェクトがコンパイルされない

public class Nothing { 
    public static void main(String args[]) { 
     Can World = new Can(); 
    } 
} 

インスタンス化されるクラス:

public class Can { 
    public Can() { 
     System.out.println("Test"); 
    } 
} 

コンパイルエラー:

Nothing.java:4: cannot find symbol 
symbol : class Can 
location: class Nothing 
     Can World = new Can(); 
     ^
Nothing.java:4: cannot find symbol 
symbol : class Can 
location: class Nothing 
     Can World = new Can(); 
         ^
2 errors 

私よりもJavaを良く知っている人は、問題があったファイルをコンパイルしようとしましたが、成功しませんでした。また、Eclipse内でコードを実行すると、自分のIDEが実行されるようになります。

すべての提案や解決策は、本当に高く評価されます。私はこのような何かが私のプログラミングを妨げるものであることを本当に嫌うでしょう。再度、感謝します。

編集:私は最近このエラーを受け取るまで、このようなクラスをコンパイルすることができました。私はEclipse IDEで作成した外部ツールを使用してコンパイルしていますが、CMDウィンドウで2つのファイルがあるディレクトリに移動し、javac Nothing.javaを使用してコンパイルしてみましたが、同じエラーが発生します。私はCan.javaを最初に(コンパイルして)コンパイルしてからNothing.javaをコンパイルしようとしましたが、これも失敗します。 (もちろん、Can.javaとNothing.javaという名前の)あなたが別々のファイルに各クラスのために提示したコードを入れて持つことにより

02/09/2011 06:44 PM <DIR>   . 
02/09/2011 06:44 PM <DIR>   .. 
02/09/2011 03:45 PM    289 .classpath 
02/09/2011 03:45 PM    382 .project 
02/09/2011 03:45 PM <DIR>   .settings 
02/09/2011 06:00 PM    75 Can.java 
02/09/2011 05:49 PM    102 Nothing.java 
       4 File(s)   848 bytes 
       3 Dir(s) 64,669,216,768 bytes free 

C:\Users\Alex\Mindstorms\NXT\leJOS NXJ\Moment>javac Nothing.java 
Nothing.java:4: cannot find symbol 
symbol : class Can 
location: class Nothing 
       Can World = new Can(); 
       ^
Nothing.java:4: cannot find symbol 
symbol : class Can 
location: class Nothing 
       Can World = new Can(); 
           ^
2 errors 
+0

ため

おかげで、同じファイル内の両方のクラスはありますか?、私ができるクラス何もクラス内で宣言された意味ですか?、ない場合、あなたはそれを –

+1

@Chuck、2つのパブリッククラスをインポートする必要があります同じファイルに存在することはできません(もしそうであれば、彼はそれに対してエラーを起こすでしょう)ので、そうではありません。 –

+0

@Chuck Birkin:どちらのクラスも公開されています。もしそれらが同じファイルにコンパイルされていないのですが、エラーは "クラスCanはpublicです。Can.javaというファイルで宣言されるべきです。 public class Can {"かそれに類するものです。 – GreenMatt

答えて

1

:ここでCMDウィンドウからコンパイルするときに私が取得テキストがあります彼らは、コマンドラインコンパイラを使用して、私のためにコンパイル同じディレクトリに両方のファイル:

javac Nothing.java 

エラーが何をコンパイルしない場合、コンパイラは、缶のクラスを見つけることができないことを示しています。両方のファイルが同じディレクトリにありますか?

+0

うわー、私はたくさんの返事をとても早く受け取ることを期待していませんでした、ありがとう! 私はこれまでこのクラスをコンパイルすることができていましたが、最近私はこのエラーを受け取るまでしか使用しませんでした。私はEclipse IDEで作成した外部ツールを使用してコンパイルしていますが、CMDウィンドウで2つのファイルがあるディレクトリにナビゲートしてコンパイルを試みたところ、 javac Nothing.java というエラーが発生しました。私はCan.javaをコンパイルしてからコンパイルしてみました。javaでも、これも失敗します。 –

+2

@Alex Ozer:質問を編集して、追加の詳細を入力して、最初に質問を読んだ人がそこに表示されるようにしてください。誰もが答えにコメントを読んでいるわけではありません。何が起こっているかについては、ファイルの1つ(おそらくNothing.java)にununprintableな文字が何らかの形で残っている可能性がありますか?再入力する(痛み、私が知っている)と再コンパイルしてみてください。 'Can World = new Can();'行から始めたいと思います。 – GreenMatt

2

問題は、適切なimport文(別々のパッケージの場合)が必要で、適切なディレクトリからJavaコンパイラを実行する必要があるということです。あなたのディレクトリ構造を想定すると、次のようになります。

src/ 
    com/ 
     yourdomain/ 
     example/ 
      Can.java 
      Nothing.java 

その後、あなたは両方のあなた*の.javaファイルの先頭に次の必要があるでしょう:

package com.yourdomain.example; 

をそして、あなたがNothingに次のimport文を入れなければなりません。Javaは(技術的にはこれは、彼らは両方とも同じパッケージ内にあるときに必要ではないが、とき別々のパッケージに必要であり、それは良い習慣です):

import com.yourdomain.example.Can; 

そしてあなたはsrcディレクトリ内からコンパイラを呼び出します。

javac com/yourdomain/example/*.java 

をそして、あなたはそれから使用してこのプログラムを実行することができます::次のように

java com.yourdomain.example.Nothing 

ところで、あなたは本当に手、このWでプロジェクトを構築することshoudn't ay; MavenまたはAntなどの自動ビルドシステムを使用する必要があります。 「Build」、「Run」、「Build & Run」ボタンに加えて、さまざまな素敵なIDE機能(コードハイライト、インクリメンタルコンパイル、修正提案)を提供する以外に、NetBeans IDEを使用してプロジェクトを作成すると、 Antビルドプロジェクトを生成します。

編集
あなたの更新の質問に基づいて、... Eclipseのコンパイラはjavacと区別されることに注意してください。 Cygwinを使用してjavacをインストールした場合、またはWindowsとUNIXの間でファイルを共有している場合(おそらくバージョン管理システム経由で)、エンコードの問題が発生している可能性があります。これらのファイルをUTF-8で再保存し、unix2dosを実行することをお勧めします(Cygwin経由でjavacをインストールした場合はその逆)、再コンパイルしてください。それでも動作しない場合は、javacを再インストールする価値があります。それに失敗すると、常にUbuntuがあります;)。

+4

パッケージ内のクラスにインポートは必要ありません。 – Nowaker

+1

@Damian、Javaを使い始めるのは、混乱を招くほどのものです...追加する価値はありません。輸入声明を作成することに傷つけることはできません。また、別のパッケージに入れておく必要があります。 –

+0

あなたは正しいです。 +1してください。 @Damian、ありがとう。 – Nowaker

0

私はそれを理解しました。結局のところ、レガロボティックスの古いバージョンをJavaでコンピュータにインストールしようとしていましたが、そのためにいくつかの環境変数を作成しました。そのうちの1つはCLASSPATH変数です。私は、Javaがそのクラス(私がもはや使用していなかった)を読んでクラスを探すことを試みていたことを確信しています。いったん私がそれを削除したら(私が使用していなかった古い変数も)、コンピュータを再起動し、JDKを再インストールして、すべて動作します。しかし、誰からの助け:)

関連する問題