从java调用scala伴随对象

时间:2015-11-19 01:58:40

标签: java scala

我在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

1 个答案:

答案 0 :(得分:0)

修正了它!希望这有帮助!

scalac Board.scala
javac -cp lib/*:. Matching.java
java -cp lib/*:. Matching