1

フォルダに3つのソースファイルがあります。コマンドラインを使用してコンパイルしてから実行したいだけです。しかし、私は次の問題を抱えています。私はウィンドウズボックスにいます:

コードは正常にコンパイルされます。

C:\mycode\src\code>javac Source1.java Source2.java Source3.java

クラスファイルがあるフォルダからは実行されません:

C:\mycode\src\deckofcards>java Source1
Exception in thread "main" java.lang.NoClassDefFoundError: Source1 (wrong name: code/Source1)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Source1.  Program will exit.

ただし、親フォルダーに移動すると実行されます。

C:\mycode\src\code>cd ..

C:\mycode\src>java code/Source1
Hello1
Hello2
Hello3...
......
....

このソースを誰かに配布したいのですが、それらがWindowsにあるのかUNIXボックスにあるのかわかりません。

最終的には実行可能なjarファイルを作成したいのですが、それでもこのようなエラーが発生していました。

4

1 に答える 1

2

ここでの問題は、Javaファイルの実行ではなく、正常に実行されます。したがって、次のことを理解したいと思います。

Javaプログラムを実行するには、次の手順を実行する必要があります。

  1. Javaソースファイル(* .javaファイル)を作成します
  2. javacを使用してバイナリクラスファイル(* .classファイル)にコンパイルする
  3. Java実行可能ファイルを使用してクラスファイルを実行します

パッケージ構造を使用して、Javaファイルを整理し続けます。あなたの場合、それは単純なアプリケーションです(そして、あなたは「コード」という名前のパッケージを使用します)が、大規模な本番アプリケーションでは、コードを多くのパッケージに編成する必要があります。

クラスファイルの実行中に、クラスファイルパス(パッケージパスを含む)を指定する必要があります。したがって、あなたの場合java code/Source1、クラスを実行するために実行する必要があります。

詳細については、次のリンクを参照してください:http: //docs.oracle.com/javase/tutorial/getStarted/cupojava/win32.html

JARファイルの作成については、次のリンクを参照できます:http: //docs.oracle.com/javase/tutorial/deployment/jar/build.html

JARファイルを実行可能にするには、main-class属性を持つマニフェストファイルを追加してください。

于 2012-06-28T17:06:36.960 に答える