2017-02-23 69 views
0

我有一个非常简单的项目,它由一个.scala文件,一个build.sbt文件和一个/lib文件夹组成,其中包含一个.jar。我的scalaVersion设置为2.10.5(为了向后兼容),我运行了sbt compile,并为scala-2.10和scala-swing创建了下载.jars。因此,它似乎是部分工作...scala.swing NoClassDefFoundError

当我做sbt run我得到一个运行时错误:

[info] Running GuiProgramOne 
[error] (run-main-0) java.lang.NoClassDefFoundError: scala/collection/GenTraversableLike$class 
java.lang.NoClassDefFoundError: scala/collection/GenTraversableLike$class 
    at scala.swing.RefSet.<init>(Publisher.scala:167) 
    at scala.swing.Publisher$$anon$1.<init>(Publisher.scala:34) 
    at scala.swing.Publisher$class.$init$(Publisher.scala:34) 
    at scala.swing.Window.<init>(Window.scala:25) 
    at scala.swing.Frame.<init>(RichWindow.scala:77) 
    at scala.swing.MainFrame.<init>(MainFrame.scala:19) 
    at UI.<init>(UI.scala:3) 
    at GuiProgramOne$.main(UI.scala:11) 
    at GuiProgramOne.main(UI.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
Caused by: java.lang.ClassNotFoundException: scala.collection.GenTraversableLike$class 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at scala.swing.RefSet.<init>(Publisher.scala:167) 
    at scala.swing.Publisher$$anon$1.<init>(Publisher.scala:34) 
    at scala.swing.Publisher$class.$init$(Publisher.scala:34) 
    at scala.swing.Window.<init>(Window.scala:25) 
    at scala.swing.Frame.<init>(RichWindow.scala:77) 
    at scala.swing.MainFrame.<init>(MainFrame.scala:19) 
    at UI.<init>(UI.scala:3) 
    at GuiProgramOne$.main(UI.scala:11) 
    at GuiProgramOne.main(UI.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
[trace] Stack trace suppressed: run last compile:run for the full output. 
java.lang.RuntimeException: Nonzero exit code: 1 
    at scala.sys.package$.error(package.scala:27) 

目录结构:

. 
├── build.sbt 
├── GUI.class 
├── GUI$.class 
├── lib 
│   └── scala-swing-2.9.1.jar 
├── project 
│   └── target 
│    └── config-classes 
│     ... 
├── target 
│   └── streams 
│    ... 
└── GUI.scala 

build.sbt:

lazy val root = (project in file(".")). 
    settings(
    inThisBuild(List(
     scalaVersion := "2.10.5" 
    )), 
    name := "Game of Life", 
    libraryDependencies ++= Seq(
     "org.scala-lang" % "scala-swing" % "2.9.1" 
    ) 
) 

code:http://otfried.org/scala/index_28.html

回答

0

您的scala版本是2.10.5,因此scala-swing版本应该是scala- swing-2.10.5.jar。所以你应该改变你的build.sbt文件如下图所示

libraryDependencies ++= Seq(
     "org.scala-lang" % "scala-swing" % scalaVersion.value 
    ) 

和你不需要的scala-swing-2.9.1.jar在你的lib目录,因为你已经宣布在依赖build.sbt。因此请将其删除以避免托管和未托管的依赖关系之间发生任何潜在的冲突。

+0

hooray,谢谢你,工作!我实际上已经尝试让它们都是2.10.6,但它不起作用,但10.5起作用。我不知道为什么,但我现在就拿它。 :) – Xianny

+0

欢迎! .. :) –