重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

cygwinでjavaを実行するとエラーになるのですが、
解決策を教えていただけないでしょうか。
こんな所で数時間も考えてしまっており、作業が滞っています。
どなたか教えていただけないでしょうか。よろしくお願い致します。

cygwin上でenvを実行した時の結果です。(一部抜粋)
JAVA_HOME=/cygdrive/c/Program Files/Java/jdk1.6.0_31
CLASSPATHも設定していたのですが、HelloWorld位だったら必要ないかと思い、unsetしました。

cygwinでプロジェクト直下に移動して、
コマンド「java HelloWorld」を実行すると以下のエラーとなる。
=============================================================================
$ java HelloWorld
java.lang.NoClassDefFoundError: HelloWorld
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: HelloWorld. Program will exit.
Exception in thread "main"
=============================================================================

因みに、ソースは以下です。
[HelloWorld.java]
package co.jp.test;
public class HelloWorld {
public static void main(String args[]){
System.out.println("HelloWorld");
}
}


また、ソースをパッケージから取り出して(パッケージを削除)、
プロジェクト直下にコピーして実行するとうまくいきます。

明らかに、パッケージにあるファイルをjavaコマンドで実行する時の固有のエラーかと思うのですが、
パッケージに含まれるファイルをcygwinで実行する時に気をつけることはありますでしょうか?
因みに、ソースは以下です。
[HelloWorld.java]
public class HelloWorld {
public static void main(String args[]){
System.out.println("HelloWorld");
}
}

A 回答 (7件)

java -cp bin co.jp.test.HelloWorld



でどうでしょうか。

この回答への補足

ありがとうございます。
うまくいきました。
根本原因がわかった気がします。
やはりclasspathですね。

それにしても、eclipseでの動作確認方法と、
cygwinでの動作確認する時の方法が異なって、手間を感じます。
(毎回、cygwin上のディレクトリにコピーしてきて、java実行)

なにかうまいやり方はないでしょうかね。。。
また、ライブラリのCLASSPATHの設定方法でうまい方法があれば、
ご教授いただきたく。よろしくお願い致します。

補足日時:2012/04/08 19:12
    • good
    • 0

あ, もちろん CLASSPATH を「適切に」設定してもいいです.

    • good
    • 0

....



「『パッケージ』に従って」配置しようよ....

cd bin; java co.jp.test.HelloWorld
とか
cd src; java co.jp.test.HelloWorld
とかの結果は?

この回答への補足

以前にも書いてますが、これでは駄目ですね~。
再度確認しても同じエラーでした。

補足日時:2012/04/08 18:59
    • good
    • 0

その HelloWorld.java とか HelloWorld.class はどのディレクトリにありますか?


find . -name HelloWorld.class
の結果はどうなります?

この回答への補足

$ find . -name HelloWorld.class
./bin/co/jp/test/HelloWorld.class
./src/co/jp/test/HelloWorld.class
となります。

それぞれ直接HelloWorld.classファイルがあるディレクトリに移動して、
javaを実行してもエラーになります。

補足日時:2012/04/04 01:50
    • good
    • 0

あれ?import java.io.*;が見当たりませんが…?

この回答への補足

import java.io.*;
って必要ですか?
実際になくても、packageの宣言がなければ動きますし。。。

補足日時:2012/04/04 01:12
    • good
    • 0

そのファイルがあるディレクトリまで移動「せず」に, パッケージを指定して


java co.jp.test.HelloWorld
としたら実行できない?

でも, co.jp.test ってパッケージ名はなんか変だなぁ.

この回答への補足

駄目みたいです。。。
同じエラーになりました。

$ java co.jp.test.HelloWorld
java.lang.NoClassDefFoundError: co/jp/test/HelloWorld
Caused by: java.lang.ClassNotFoundException: co.jp.test.HelloWorld
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: co.jp.test.HelloWorld. Program will exit.
Exception in thread "main"

補足日時:2012/04/04 00:45
    • good
    • 0

「パッケージ」に従ってファイルを配置したらどうなりますか?

この回答への補足

一部誤記があり、すいません。
現状エラーとなっているのは、
「パッケージ」に従ってファイルを配置し、そのファイルがあるディレクトリまで移動してから、
java HelloWorld と実行しています。

また、java -versionもjavac -versionも正常に返ってきます。

補足日時:2012/04/04 00:21
    • good
    • 0

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