みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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週間なので,まだ完全に理解できていません><
 
 よろしくお願いします

投稿日時 - 2011-07-11 14:14:04

QNo.6868693

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

質問で提示した例外は
$java ap.start
のときの例外ね。

これでいけるんじゃないかしら

$cd ap
$java start

投稿日時 - 2011-07-12 18:12:02

補足

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

投稿日時 - 2011-07-12 22:57:05

ANo.1

NoClassDefFoundError

つまり、
クラスが見つかりませんよ
ってこと。

実行時にクラスパスから抜けているんじゃない?

投稿日時 - 2011-07-11 14:21:36

補足

 実行の方法は…
$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!

とすれば,正しく動作します.

投稿日時 - 2011-07-12 17:37:00

あなたにオススメの質問