はじめまして。

最近JAVAを始めようと思ったんですが、早くも行き詰まってしまいました。

コンパイルは出来るんですが、実行されないのです。
以下のような文章が出てきます。

Exception in thread "main" java.lang.NoClassDefFoundError: Hello

ちなみに、買った本のサンプルプログラムでも同じでした。

これは何が原因なんでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

これは初心者の人がよく引っかかるところですね。


JavaFAQのサイトがあるので、そちらをご覧ください。
今回の件以外にも、いろいろ参考になることが載って
いますので、目を通しておくとよいです。

参考URL:http://www.gimlay.org/~javafaq/S002.html#S002-08
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

初心者がよく引っ掛かるトコだったんですね!

無事に実行できるようになりました。

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:13

CLASSPATHは何も指定しないときのデフォルトがカレントディレクトリ、


指定した場合、指定した物のみ
(なので、カレントディレクトリもCLASSPATHに含める場合は
指定しなければならない)、

となるはずなのですが。

カレントディレクトリでjavaを実行しているか、CLASSPATHにclassファイルの有る
ディレクトリを参照しているか、確認してください。
あとは、".class"は実行時に指定しませんので念のため。
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

皆さんの言う通りでした。

無事に実行できました!

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:15

arya_520さんは、最近Javaを始めたということなので、JDKのバージョンは1.3であると思います。


DOSプロンプト(コマンドプロンプト)にて、javacでコンパイルした後、
> java Hello
というコマンドでjava.lang.NoClassDefFoundErrorの例外が発生するのであれば、
> java -classpath . Hello
というように、-classpathオプションで、カレントディレクトリを指定することにより、クラスパスが見つかります。
なお、毎回例外が発生するようであれば、setコマンドで環境変数CLASSPATHの設定内容を確認し、
> set CLASSPATH=.;%CLASSPATH%
というコマンドを実行すれば、javaコマンドで-classpathオプションが不要となります。
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

結局、『set CLASSPATH=.;%CLASSPATH%』としたら完全に消えました。

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:19

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコンパイル環境の違いによる、浮動少数点の違い

不動少数(float)を使った、c言語の演算プログラムを作っています。

Aマシン(CentOS5, gcc3.4)でコンパイルした、"test_a.so"と"test_a.a"について、
Aマシンで実行した結果、両者の結果は一致します。

Bマシン(Fedora5, gcc3.0)でコンパイルした、"test_b.so"と"test_b.a"について、
Bマシンで実行した結果、両者の結果は一致します。
Aマシンで実行した結果、両者の結果が異なります。

結果の比較をすると、以下のようになります。
"test_a.so"=="test_a.a"!="test_b.so"!="test_b.a"

(1)コンパイル環境と実行環境が違うと、浮動少数の演算に違いがでることがありますか?
(2)コンパイル環境と実行環境が違うと、so と aに違いがでることがありますか?

上記2点について、ご存知の方いらっしゃいましたら教えてください。
お願い致します。

Aベストアンサー

ちなみに、
"test_a.so"と"test_a.a"をBマシンで実行した結果はどうなりますか?

理屈だけで言えば、
・コンパイルラによるの構文解析及び変換処理の違い
・実行ファイルが使用する浮動小数点ライブラリの違い
で結果が変わる可能性はあります。

Q「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」エラー

Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。

以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。

環境設定としてCLASSPATHにclasses12.zipのパスを通しました。

-------------------------------------------------
// JDBC APIのインポート
import java.sql.*;class CUSTOMER {
public static void main (String args[])
throws SQLException, ClassNotFoundException {

// JDBC Driverの登録
Class.forName("oracle.jdbc.driver.OracleDriver");

// Oracle9iに接続
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin@192.168.0.10:1521:testdb", "test", "test");

// ステートメントを作成
Statement stmt = conn.createStatement();

// 問い合わせの実行
ResultSet rset = stmt.executeQuery("SELECT COUNT(*) FROM CUSTOMER");

// 問い合わせ結果の表示
while ( rset.next() ) {
// 列番号による指定
System.out.println(rset.getInt(1) + "\t" + rset.getString(2));
}

// 結果セットをクローズ
rset.close();

// ステートメントをクローズ
stmt.close();

// 接続をクローズ
conn.close();
}
}
-------------------------------------------------
何かおわかりの方いらっしゃいましたら教えて下さい。宜しくお願いします。

Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。

以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。

環境設定としてCLASSPATHにclasses12.zipのパスを通しました。

-------------------------------------------------
// JDBC APIのインポート
import java.sql.*;class CUSTOMER {
public static void main (String args[])
...続きを読む

Aベストアンサー

thin@ではなくthin:@です。

Qビルドとコンパイルの違い

ビルドとコンパイルの違いがわかりません。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いいたします。

Aベストアンサー

ビルド=コンパイル+リンク
コンパイル=ソースコードを解析し、オブジェクトファイルを作成すること。
リンク=上記のオブジェクトファイルにライブラリを結合し、実行可能ファイルを作成すること。

Q Exception in thread "main" java.la

 Exception in thread "main" java.lang.StackOverflowError
というエラーが出ます

 moji()にtestという変数をいれてやり、mainから、書かそうとしていますが、
 Exception in thread "main" java.lang.StackOverflowError
というエラーが出ますが、何故かわかりません。
 宜しくお願いします。

************************************************************
public class ArgsTest2
{
public static void main(String args[])
{
moji();
}

public static void moji()
{
String[] test = {"abcde","fghij"};
main(test);
}
}

Aベストアンサー

ユーザ定義関数(moji)がmain関数を呼ぶことができるのか
分かりませんが、できたとしてもこのコードでは、

main()→moji()→main()→moji()・・・

の無限ループになりますね。

文字を出力するコードもありませんし、
もう一度落ち着いて考え直してみてください。

Qコンパイル言語とインタープリター言語の違いについて

コンパイルするプログラミング言語とインタープリターする
プログラミング言語の違いについて教えてください。
特に、開発上および運営上の利点・欠点についてお願いします。

また、CGIでは、PHPやPERLなどのインタープリター言語が
主流ですが、その理由とC言語などで組むのと比較して、
どのような利点があるのか教えてください。

Aベストアンサー

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコンパイル言語・・・CPU/OS等環境依存のマシン語ファイルをつくり実行する
・その他のいわゆるコンパイル言語・・・あらかじめ中間コードファイルにコンパイルしておき、その中間コードをインタープリトして実行する
・いわゆるインタープリター言語・・・実行の最初に中間コードにコンパイルしそれをインタープリトして実行する

運営上の問題
・いわゆるコンパイル言語・・・ソースファイルとオブジェクトファイルの関連づけをきちんと管理する必要がある。管理しないとエラー発生時にどのソースファイルを調べればいいかわからない
・純粋なコンパイル言語・・・上記に加えて、異なる環境で動かすためには再コンパイルとテストが必要
・いわゆるインタープリタ言語・・・何度も何度も実行される場合、コンパイルの時間が実行速度に影響する(ウェブアプリでの利用では一度できた中間コードをHTTPサーバープログラム中に保持することでコンパイルの繰り返しを防ぐ工夫がされることが多い)

特定のOS環境でのみ使える機能をつかったプログラムは、どの形式であろうが、その特定の環境でしか使えません。

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコ...続きを読む

QException in thread "main" java.…でも。

Javaの初心者です。
仕事で他の方が作ったプログラムをいじることになりました。
あるclassファイルを実行しようとしたところ、javaコマンドで実行しようとしたところ、タイトルにあるように、Exception in thread "main" java.lang.NoClassDefFoundError:というエラーメッセジーが出ました。
いろいろ調べた結果、「:」以降に出てくる名前のクラスが見つからず、大半の場合は、CLASSPATHの指定がされていなかったり、まちがっていることが分かりました。
ただ、今回、表示されたのは、こんなクラス名なんです。
org/apache/bcel/generic/ATHROW

bcel-5.1.jarというファイルはあるのですが、これをどこかに置いたら解決するものなのでしょうか?
ためしに、実行しようとしたclassファイルと同じディレクトリに置いてましたが、何の効果もありませんでした。

もしお分かりになる方がいらっしゃいましたら、よろしくお願い致します。

Aベストアンサー

CLASSPATHにそのjarファイル(のフルパス)を追加してください。

jarファイルの中には、classファイルが入っています。
通常はCLASSPATHには、classファイルのあるディレクトリを指定しますが、
jarファイルに入っているclassファイルを呼び出したい場合は
jarファイルそのものをCLASSPATHに追加します。

Q激しくカテ違いかもしれませんが、コンパイル後exeがウィルス感染?

お疲れ様です。
激しくカテゴリ違いかもしれませんが、よろしくお願い致します。

環境
OS:windows vista
開発環境:visual c++ 2008 express edition
セキュリティ:SOURCE NEXT(ウィルスセキュリティーZERO)

上記でwinsock系の関数を使ったプログラムをコンパイル(Release版)しexeを作成すると「Trojan」ウィルスとして検知されてしまいます。
※同じプログラムをDebug版でコンパイルした時には起きません。

本当に「Trojan」ウィルスに感染しているものなのか?
それとも誤検知なのか?
なにかしら情報をお持ちの方、申し訳ありませんが情報がありましたら提供の程お願い申しあげます。

Aベストアンサー

自作プログラムという事であれば誤検知ということで良いと思います
ZEROではありませんが昔同様な事例を経験したことはあります

ただ一応他のスキャンプログラムでも確認した方が良いでしょう
(ZEROは余り評判よくないので乗り換えた方が良いかも)

Qjava.lang.NoClassDefFoundError

こちらの
http://www.hellohiro.com/socket.htm
サーバー(マルチスレッド)とクライアントのプログラムを
Windows環境でサーバーのアドレスを"localhost"にして一台のPC上で実行したところ
うまくいったのですが
今度はサーバー側のプログラムをlinuxサーバーにおいてアドレスを指定して行ったところ
コンパイルは正常に行えて(classファイルは作成されました)、実行するとクライアントからの接続までは
うまくいくのですが
("172.0・・・ から接続がありました"とは表示されます)
その後通信が切れてしまい
Exception in thread "main" java.lang.NoClassDefFoundError:
Connect
という例外が起きてしまいます。
過去ログなどを調べたところクラスの定義が見つからないとのことなのですがソースにはしっかり定義されていると思います
またサーバーのプログラムの実行を
java -classpath . HelloWorldMultiThreadServer
などでも行ってみましたが同じ状況になってしまいます
どなたか是非アドバイスをいただけないでしょうか
よろしくお願い致します

こちらの
http://www.hellohiro.com/socket.htm
サーバー(マルチスレッド)とクライアントのプログラムを
Windows環境でサーバーのアドレスを"localhost"にして一台のPC上で実行したところ
うまくいったのですが
今度はサーバー側のプログラムをlinuxサーバーにおいてアドレスを指定して行ったところ
コンパイルは正常に行えて(classファイルは作成されました)、実行するとクライアントからの接続までは
うまくいくのですが
("172.0・・・ から接続がありました"とは表示されます)
その後通信が切れてし...続きを読む

Aベストアンサー

linux側でjava -versionを叩いて、1.4と出ますよね?

コンパイル時と実行時のJavaバージョンが異なっていたり
しないでしょうか?

私は、下記のようなシェルを作成して問題なく動作してます。
クラスパスも指定無しですので、Java1.4で
JAVA_HOMEの設定があれば大丈夫だと思います。
※JAVA_HOMEの設定が無いとjava.net.*等のライブラリに
パスが通らないかもしれないです。(たぶん。。。)

#!/bin/sh

JAVA_HOME=/opt/java1.4

echo $JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH

echo $CLASSPATH

java -version
javac HelloWorldSocketServer.java
java HelloWorldSocketServer


例外のスタックトレースをもっと付けてもらえると
良いのですが・・・
Exception in thread "main" java.lang.NoClassDefFoundError:
Connectの続きを

linux側でjava -versionを叩いて、1.4と出ますよね?

コンパイル時と実行時のJavaバージョンが異なっていたり
しないでしょうか?

私は、下記のようなシェルを作成して問題なく動作してます。
クラスパスも指定無しですので、Java1.4で
JAVA_HOMEの設定があれば大丈夫だと思います。
※JAVA_HOMEの設定が無いとjava.net.*等のライブラリに
パスが通らないかもしれないです。(たぶん。。。)

#!/bin/sh

JAVA_HOME=/opt/java1.4

echo $JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH

echo $CLASS...続きを読む

Qgcc バージョン違いによるコンパイルエラー

C言語でWeb系のプログラムを作成している者です。
以前まで、OSはFreeBSD 4.11-RELEASE-p12・gccのバージョンは2.95.4でコンパイルできていたプログラムが、OSはFreeBSD 5.4-RELEASE-p8・gccのバージョンは・gccのバージョンは 3.4.2で、今まで出なかったようなエラーが沢山出現し、コンパイルできなくなってしまいました。

OSをインストールし直すのは、既に稼働中のサイトですので厳しく、GCCのバージョンを下げるかソースを書き換えるかして対処する方向で行きたいと考えております。
しかし、gccの2.95.4の圧縮ファイルはもう、gccの公式サイトに落ちておらず、バージョンダウンは難しそうです。

gccのバージョンによるコンパイルエラーを乗り越えた方、ご指摘など有りましたらお教えくださると幸いです。

Aベストアンサー

> ソースコードの添付は、会社のものですのでちょっと厳しいので、部分的に…

全文は必要ないのです。エラーが発生した部分を、エラーが再現可能な形で提示してもらえれば、おそらく問題点を指摘できます。

> int a = 0;
> char b[2] = "";
> char *c[256] = {0};
> こういった、宣言の指定部分で特にエラーが出ているようですので、こちらの表記が問題なのでしょうか。

上記の表記自体は問題ありません。ただ、同じ変数に対する初期化が複数回行われていると、

error: redefinition of parameter '○○'
error: previous definition of '○○' was here

ということになります。
具体的には、

int a = 1;
/* 別の宣言並び */
int a = 1;

のように、同じ変数を二回初期化した場合です。

Qjava.lang.NoClassDefFoundErrorというエラーが出ます

ご質問させて頂きます。

自分のPC(XP)からTelnetで
LINUX(Red Hat Linux release 9 (Shrike))に接続しています。

サンプルを参考にして以下のコードを作ってみました。
これは、PostgreSQLで作成したデータベース(aa)の
テーブル(test)のデータを表示させようとしています。

import java.sql.*;

public class sample1{
 public static void main(String [] args){
  String driver = "org.postgresql.Driver";
  String url = "jdbc:postgresql://192.178.215.230/home/postgres/data/aa";
  try{
    Class.forName(driver);
    Connection con = DriverManager.getConnection(url,"postgres","aaaa");
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery("SELECT * FROM test"); 
    System.out.println("shainno shimei ");
    while ( rs.next() ){ 
      System.out.println(" "+rs.getInt("shainno")+" "+ rs.getString("shimei"));
    }
    rs.close(); 
    st.close(); 
    con.close();  
  }catch (SQLException sqlEx){
    System.out.println("SQLERROR: " + sqlEx.toString());
  }catch (Exception ex){
    ex.printStackTrace();
  }
 }
}

これを実行すると、
[postgres@localhost postgres]$ java sample1
以下のようなエラーが出てします。
Exception in thread "main" java.lang.NoClassDefFoundError: sample1

ご教授して頂けたら幸いです。

ご質問させて頂きます。

自分のPC(XP)からTelnetで
LINUX(Red Hat Linux release 9 (Shrike))に接続しています。

サンプルを参考にして以下のコードを作ってみました。
これは、PostgreSQLで作成したデータベース(aa)の
テーブル(test)のデータを表示させようとしています。

import java.sql.*;

public class sample1{
 public static void main(String [] args){
  String driver = "org.postgresql.Driver";
  String url = "jdbc:postgresql://192...続きを読む

Aベストアンサー

ふたたび,#1です.

> 何度も厚かましいお願いで
> 大変に恐縮ですが
> ご教授して頂けたら幸いです。

いえいえ.
もうすぐできますよ.頑張りましょう.

PostgreSQLのODBCドライバをCLASSPATHに含めていますか?

postgresql.jarとかpg72jdbc2.jarといったファイルがどこかにあるはずです.
Linuxでの書式はわかりませんので,他の方にお願いするとして...汗

Windowsでは以下のようになります.
CLASSPATH=.;C:\dir\postgresql.jar;c:\...


人気Q&Aランキング

おすすめ情報