简体   繁体   English

Scala中的Java AWT:(AWT-EventQueue-0)java.lang.NoClassDefFoundError

[英]Java AWT in scala: (AWT-EventQueue-0) java.lang.NoClassDefFoundError

I'm trying to use java awt in scala to make a simple desktop application. 我正在尝试在scala中使用java awt创建一个简单的桌面应用程序。 I have been working on it for some days without any problem, until I didn't touch it for 2 days and when I came back, I get a java.lang.NoClassDefFoundError exception. 我已经花了好几天没有任何问题,直到两天都没有碰它,当我回来时,我遇到了java.lang.NoClassDefFoundError异常。 It was working fine before, but now even the simplest of code gives me this error. 以前工作正常,但现在即使是最简单的代码也给我这个错误。

https://github.com/aganm/NoClassDefFoundError https://github.com/aganm/NoClassDefFoundError

Main.scala Main.scala

import java.awt.{EventQueue}

class Bar(val bar: Int) {
}

object Main {

  def main(args: Array[String]) {

    EventQueue.invokeLater(() => {
      val b = new Bar(20)
      println(b.bar)
    });

  }

}

I run it with sbt 我用sbt运行它

sbt run

It compiles, but I get this exception 它可以编译,但出现此异常

[error] (AWT-EventQueue-0) java.lang.NoClassDefFoundError: Bar
[error] java.lang.NoClassDefFoundError: Bar
[error]         at Main$.$anonfun$main$1(Main.scala:11)
[error]         at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
[error] oats / Cat java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
[error]         at java.awt.EventQueue.access$500(EventQueue.java:97)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:709)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:703)
[error]         at java.security.AccessController.doPrivileged(Native Method)
[error]         at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
[error]         at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
[error]         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
[error]         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
[error]         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
[error]         at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
[error] Caused by: java.lang.ClassNotFoundException: Bar
[error]         at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
[error]         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error]         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error]         at Main$.$anonfun$main$1(Main.scala:11)
[error]         at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
[error]         at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
[error]         at java.awt.EventQueue.access$500(EventQueue.java:97)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:709)
[error]         at java.awt.EventQueue$3.run(EventQueue.java:703)
[error]         at java.security.AccessController.doPrivileged(Native Method)
[error]         at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
[error]         at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
[error]         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
[error]         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
[error]         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
[error]         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
[error]         at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
[error] stack trace is suppressed; run last Compile / bgRun for the full output

What am I doing wrong? 我究竟做错了什么?

I suspect a SBT bug. 我怀疑是SBT错误。 I reproduce the issue with SBT 1.3.0, but not with SBT 1.2.8. 我重现了SBT 1.3.0的问题,但没有重现SBT 1.2.8的问题。 Also I do not reproduce the issue when I add fork := true into the build.sbt file even when using SBT 1.3.0. 另外,即使在使用SBT 1.3.0时,将fork := true添加到build.sbt文件中时,也不会重现该问题。 You can use any of those options as a workaround. 您可以使用这些选项中的任何一种作为解决方法。

I have reported the issue as Strange NoClassDefFoundError error with SBT 1.3.0 - we shall see if it is confirmed or perhaps explained somehow. 我已将问题报告为SBT 1.3.0的Strange NoClassDefFoundError错误 -我们将查看它是否已确认或以某种方式解释。

The 1.3.0 new functionality seems to be In process class loading - however none of the values described seems to fix the issue, therefore I am not sure if it really related. 1.3.0的新功能似乎是在进程类加载中 -但是,所描述的值似乎都不能解决该问题,因此我不确定它是否真的相关。

It is in fact related to an issue of sbt 1.3.0's stricter ClassLoader and thread management during run task, which should be fixed in the next patch release. 实际上,这与sbt 1.3.0的run任务期间更严格的ClassLoader和线程管理问题有关,应在下一个补丁程序发行版中修复此问题。

In the meantime however, forking does work: 但与此同时,分叉确实可以:

Compile/ run / fork := true

Here's the output: 这是输出:

sbt:NoClassDefFoundError> run
[info] running (fork) Main
[info] 20
[success] Total time: 2 s, completed Sep 17, 2019 11:29:04 AM

I think the related bug is [1.3.0] not terminating ActorSystem leads to NoClassDefFoundError at the end of run as sbt cleans up the ClassLoader #5075 . 我认为相关的错误是[1.3.0]在run结束时没有终止ActorSystem导致NoClassDefFoundError ,因为sbt清理了ClassLoader#5075 In your case, EventDispatchThread keeps running even after Main.main is exited. 就您而言,即使退出Main.mainEventDispatchThread保持运行。 sbt cleans after the run and removes the ClassLoader (which has your classes in it), so when EventDispatchThread runs it can no longer find your classes. sbt在run后会清理并删除ClassLoader(其中包含您的类),因此在EventDispatchThread运行时,它不再能找到您的类。

Close in-process classloader only once run has completed #5081 , hopefully fixes this issue. 仅在运行完成后关闭进程内类加载器#5081 ,有望解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 线程“AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError 线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:org / apache / commons / lang3 / Validate - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: org/apache/commons/lang3/Validate Java 错误“线程异常”AWT-EventQueue-0“java.lang.NoClassDefFoundError: mslinks/ShellLink” - Java Error “Exception in thread ”AWT-EventQueue-0“ java.lang.NoClassDefFoundError: mslinks/ShellLink” 无法正确执行jar - 线程“AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError - Cannot excute jar correctly - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError AWT-EventQueue-0“ java.lang.NoClassDefFoundError:org / apache / xmlbeans / XmlObject - AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject 线程“ AWT-EventQueue-0”中的NetBeans异常java.lang.NoClassDefFoundError:DSA - NetBeans Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: DSA Ant 错误“线程异常”AWT-EventQueue-0“java.lang.NoClassDefFoundError:com/sun/jna/Library” - Ant error “Exception in thread ”AWT-EventQueue-0“ java.lang.NoClassDefFoundError: com/sun/jna/Library” 线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:com / sun / image / codec / jpeg / JPEGCodec - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec 线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:java.lang.Class.forName0上的org / joda / time / ReadableInstant(本机方法) - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant at java.lang.Class.forName0(Native Method) AWT-EventQueue-0“ java.lang.UnsatisfiedLinkError - AWT-EventQueue-0" java.lang.UnsatisfiedLinkError
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM