• 締切済み

javaでscalaのクラスを使う

 Scala初心者です^^  Scalaで作ったクラスをJavaで使おうとしています.  しかしなかなかうまくいかなくて…  ソースを下に書いておきます. [ap/hello.scala] class hello(str2: String){ val str = str2 def say(){ println(str) } } [ap/start.java] public class start{ public static void main(String[] args){ hello h = new hello("Hello!"); h.say(); } }  helloクラスのコンストラクタを用いて指定した文字列を helloクラスのsayメソッドで標準出力するだけの簡単なクラスなのですが, うまく実行できず… Exception in thread "main" java.lang.NoClassDefFoundError: ap/start/class Caused by: java.lang.ClassNotFoundException: ap.start.class at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Kazus-MackBookPro:ScalaLearning macuser$ java ap/start Exception in thread "main" java.lang.NoClassDefFoundError: ap/start (wrong name: start) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) というエラーが出てしまいます.    どこが悪いかわかる方いらっしゃいませんか?  それとも,JavaではScalaで作った.classファイルは使うことができないのでしょうか?  Scalaはまだ覚えて2週間なので,まだ完全に理解できていません><    よろしくお願いします

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

質問で提示した例外は $java ap.start のときの例外ね。 これでいけるんじゃないかしら $cd ap $java start

hira_kazu
質問者

補足

 たびたびの回答ありがとうございます.  $java ap.startでも$java start(もちろん$cd apの後)でも 同じエラーになってしまうようです><

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

NoClassDefFoundError つまり、 クラスが見つかりませんよ ってこと。 実行時にクラスパスから抜けているんじゃない?

hira_kazu
質問者

補足

 実行の方法は… $scalac hello.scala として,apフォルダ内にhello.classができたのを確認してから… $javac start.java として,start.javaをコンパイルしています. 実行は $java start (又は, $java ap.start) と実行しています. hello.classもstart.classも同じapフォルダ内に入っているので,javaの感覚なら 正しく動作するのかな?と思っていたのですが, やはり上のエラーが出てしまいます. この方法は間違っているのでしょうか?間違っていなければ, ほかにどこを疑えばいいのでしょうか? ちなみに,hello.classは $scala でscalaを立ち上げて > val h = new hello("Hello!") ~~~ > h.say() Hello! とすれば,正しく動作します.

関連するQ&A