我在java和scala之间进行交互有点新鲜。我想从Java中调用Scala中的伴随对象。
文件结构(在当前目录中):
Board.scala
Matching.java
lib/scala-library.jar
lib/scala-swing_2.11-1.0.1.jar
Matching.java
public class Matching{
public void startGame(){
new Board();
}
public static void main (String[] args){
Matching newGame = new Matching();
newGame.startGame();
}
}
Board.scala
import scala.swing._
class Board extends MainFrame {
title = "Matching Game"
contents = new GridPanel(3, 2) {
contents += new Label("Test Label")
contents += new Button("Test Button1")
contents += new Button("Test Button2")
contents += new Button("Test Button3")
contents += new CheckBox("Check1")
contents += Button("Close") { sys.exit(0) }
}
visible = true;
}
object Board {
def main(args: Array[String]) {
val ui = new Board
ui.visible = true
}
}
命令行:
scalac Board.scala
javac Matching.java
java -cp /lib/*.jar:. Matching
但是在运行时,终端会给出:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/swing/MainFrame
单作:scalac Board.scala; scala Board
完美无缺。我忘记了什么吗?我希望我正确地连接罐子。谢谢!
编辑:堆栈跟踪例外
java -cp 'lib/*.jar:.' Matching
Exception in thread "main" java.lang.NoClassDefFoundError: scala/swing/MainFrame
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Matching.startGame(Matching.java:4)
at Matching.main(Matching.java:8)
Caused by: java.lang.ClassNotFoundException: scala.swing.MainFrame
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 14 more
make: *** [run] Error 1
答案 0 :(得分:0)
修正了它!希望这有帮助!
scalac Board.scala
javac -cp lib/*:. Matching.java
java -cp lib/*:. Matching