0
Я немного новичок в взаимодействии между java и scala. Я хочу вызвать объект-компаньон в Scala с Java.Вызов сопутствующего объекта scala из java
Файловая структура (в текущем каталоге):
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
работает отлично. Я что-то забыл? Надеюсь, я правильно свяжу банки. Спасибо!
Edit: Трассировка стека исключений
java -cp 'lib/*.jar:.' Matching
Exception in thread "main" java.lang.NoClassDefFoundError: scala/swing/MainFrame
\t at java.lang.ClassLoader.defineClass1(Native Method)
\t at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
\t at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
\t at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
\t at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
\t at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
\t at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
\t at java.security.AccessController.doPrivileged(Native Method)
\t at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
\t at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
\t at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
\t at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
\t at Matching.startGame(Matching.java:4)
\t at Matching.main(Matching.java:8)
Caused by: java.lang.ClassNotFoundException: scala.swing.MainFrame
\t at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
\t at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
\t at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
\t at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
\t ... 14 more
make: *** [run] Error 1
Не является частью MainFrame scala.swing._? –
Yup: «java -cp /lib/*.jar :. Matching» должен позаботиться обо всех баночках, насколько мне известно. –
Это '*' сложно. Вероятно, вам придется процитировать его так, чтобы оболочка не расширила его. 'java -cp '/lib/*j.jar :.' Соответствие' http://stackoverflow.com/a/13609448/14955 – Thilo