6

私はfedora 19を使用しています。HelloWorld.javaの内容:

    class HelloWorld {
        public static void main( String args[] ) {
            System.out.println( "Hello World!!" );
        }
    }

を使用して正常にコンパイルできます

javac HelloWorld.java

しかし、私はそれを使用して実行することはできません

java ハローワールド

次のエラーが発生します

エラー: メイン クラス HelloWorld が見つからないか、読み込めませんでした

しかし、私はそれを使用して実行できます

sudo Java HelloWorld

ここで何が欠けていますか???

4

6 に答える 6

9

コンパイルされたクラスを含むクラスパスを設定していません! javaどこを見ればいいのか教えないと、クラスを見つけることができません。

試すjava -cp . HelloWorld

ソースはこちら

ただし、sudoで機能する理由はわかりません。私の推測では、CLASSPATH は現在のユーザーではなく root ユーザーに設定されていると思います

于 2013-07-05T06:47:09.160 に答える
0

Mac 10.7.5 で HelloWorld を実行しようとすると、同じ問題が発生します。javac で問題なく HelloWorld.java ファイルをコンパイルしました。次に、「java HelloWorld」を実行しようとしましたが、同じエラーが発生しました:「メインクラスが見つからないか、ロードできませんでした」

プログラムを実行できるようになったのは、Mac ターミナルのディレクトリ (cd) を .class ファイルを含むディレクトリに変更した後でした。

HTH、スティーブ

于 2014-01-20T16:23:36.410 に答える
0

これはかなり奇妙です。問題はjava、非特権ユーザーとして実行すると、「.class」ファイルを見つけたり読み取ったりできないことです。ただし、「root」として実行すると、できます。

これは、「HelloWorld.class」ファイルを間違った所有者および/または間違った権限で作成したことを示唆しています。

を実行して権限を確認しますls -l HelloWorld.class。所有者はユーザー アカウント ("root" ではありません) である必要があり、ファイルに対するユーザー読み取り権限が必要です。

他に考えられる説明をいくつか示します。

  • あなたが実行しているjavaコマンドは、あなたが思っているものではないかもしれません。which java自分で実行したときに何が表示されるかを確認してください。それが「実際の」java実行可能ファイルであり、現在のディレクトリまたはルート/ sudo にない他のディレクトリにあるスクリプトや何かではないことを確認してください$PATH

  • CLASSPATH現在のディレクトリ(「HelloWorld.class」が...と思われる場所)がクラスパス上にないように環境変数を設定している可能性があります。ただし、設定されていない環境でコマンドが実行されてsudo javaいる場合。その場合、引数がない場合は、;だけで構成されるデフォルトのクラスパスが取得されます。つまり、現在のディレクトリ。java$CLASSPATH-cp"."


問題が CLASSPATH 環境変数であることが判明した場合は、設定を解除することをお勧めします...そして、シェルの「rc」ファイルを編集して設定を解除することもお勧めします。

java代わりに、コマンド、コマンドなどで「-cp」コマンドを使用し、javacAnt または Maven または IDE に切り替えて、コードをビルドおよび実行します。(または、アプリケーション ランチャーとしていくつかの小さなラッパー スクリプトを作成することもできます。)

CLASSPATH 環境変数に依存しません。特にコーディングプロジェクトを切り替える場合は、厄介な驚きをもたらす可能性があります. (確かに、本番環境ではそれに依存しないでください!)

于 2013-07-05T07:00:45.703 に答える
0

私は以前に同じ問題を抱えています。多分あなたは同じ間違いをしました。 私の間違いは、「cd」を使用して、パッケージディレクトリのすぐ上のディレクトリではなく、パッケージディレクトリ内に移動することでした。 たとえば、すぐ上のディレクトリが「Hello」と呼ばれている場合、次のように入力して実行できます。 java Hello/HelloWorld

于 2015-05-17T06:11:06.793 に答える