2012-02-06 7 views
2

私はまだJavaについて非常に新しいです。私はCMUのSphinx4音声認識を使用しようとしています。彼らが準備したコンパイルプロセスを使用したとき、すべて正常に動作しました。しかし、自分でコードを別々にコンパイルしようとしているので、私は問題に遭遇しています。Java - NoClassDefFoundErrorクラスが存在しますが

ソースコード(src /)には、手動でコンパイルしようとしているデモと、使用する主な機能を含むsphinx4 /ディレクトリが含まれているapps /ディレクトリがあります。コードをコンパイルするには、apps /ディレクトリに移動し、 javac -classpath ../sphinx4/ edu/cmu/sphinx/demo/helloworld/HelloWorld.javaを実行します。これはエラーなしでコンパイルされます。しかし、その後、私は結果があるjava edu/cmu/sphinx/demo/helloworld/HelloWorldを使用して、新しく作られたクラスを実行しようとすると:

Exception in thread "main" java.lang.NoClassDefFoundError: edu/cmu/sphinx/util/props/ConfigurationManager 
    at edu.cmu.sphinx.demo.helloworld.HelloWorld.main(HelloWorld.java:33) 
Caused by: java.lang.ClassNotFoundException: edu.cmu.sphinx.util.props.ConfigurationManager 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 1 more 

しかし、私の知る限り、このクラスは、それがあるべき場所権利が存在しません。 src/sphinx4/edu/cmu/sphinx/util/props/ConfigurationManager.classが存在します。私はそれがそこにあるときに見つけられないと考えられる理由があると推測していますが、私はまだJavaについて十分に知らないのでそれを知らないだけです。これが起こる原因は何でしょうか?

ありがとうございました!

答えて

3

2つの問題:

  • あなたはときに実行だけでなく、あなたが
  • をコンパイルあなたが実行するクラス名を指定する必要がクラスパスを指定する必要があります。

    java -classpath .:../sphinx4 edu.cmu.sphinx.demo.helloworld.HelloWorld 
    

    使用 ";":それは、あなたがしたい

にスラッシュを持っていません。あなたがWindows上で走っているなら「:」の代わりに。

(あなたのエラーメッセージは、あなたが実際には、あなたの質問は本当に何をやっている示さなかった場合には右のクラス名を与え、あることを示唆している。これは、取得するためには、あなたの質問に正確であることが重要です便利な回答です)

+0

お返事ありがとうございました! (申し訳ありませんが、私は速く返信していませんでした)。 私はlinuxを使用しています。そのため、私はコロンを使用しています。 私は二重チェックして、実際に私が使用している正確なコマンドです。代わりにクラス名を使用するのはどこですか?私は "java"コマンドを使用しますか? 実行時にクラスパスを含めようとします。うまくいけばそれは問題を解決するでしょう。再度、感謝します! – golmschenk

+0

ああ、実行時にクラスパスを追加すると、クラス名を使用していないというエラーが発生しました。だから私は上記のことを正しく掲示しましたが、代わりに実行時にクラス名を使う必要があるのは間違いありません。 – golmschenk

+0

@ golmschenk:正しいクラス名を使用しなかった場合は、スタックトレースが 'HelloWorld'クラスを見つけたら何の兆候も見せてくれて驚いています。 –

0

antを使用して、新しいクラスでプロジェクトをビルドする必要があります。

ここの手順に従ってください:http://cmusphinx.sourceforge.net/sphinx4/#how_build

幸運を祈る!

+0

はい、私は最初のセットアップ中にそれらの指示に従いました。そしてそれを通して、デモはうまくいきました。しかし、私は現在、sphinxディレクトリの外にファイルを作成しようとしています。私は手動でそこにコンパイルすることを計画していました。何が間違っているのかを理解するために、既存のデモを手作業でコンパイルする必要があると判断しました。どういうわけか、自分の外部ファイルにもantを使用するべきですか?ありがとう! – golmschenk

+0

私の話によれば、アプリケーション全体をビルドしてパッケージ化するには、アリを守るべきです。 – bugske

+0

クールクール。私はそれを使用する方法を検討します。ありがとう! – golmschenk

1

ルック:
注4:あなたはソース配布を持っている場合は

、JARファイルのlib/sphinx4.jarが構築されていることを確認してください。そうでない場合は、最上位ディレクトリに移動し、antと入力します。

関連する問題