Lambda表达式抛出异常

6

我刚刚使用maven(com.vaadin:vaadin-archetype-application@7.2.6)开始了一个新的vaadin项目。

在默认的MyVaadinUI.java中,我已经用lambda表达式替换了Butten.ClickListener(),之后当运行package jetty:run时出现了异常。

更改前:

Button button = new Button("Click Me");
  button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
      layout.addComponent(new Label("Thank you for clicking"));
    }
});
layout.addComponent(button);

之后:

Button button = new Button("Click Me");
button.addClickListener(event -> layout.addComponent(new Label("Thank you for clicking")));
layout.addComponent(button);

异常:

2014-08-26 13:23:30.069:WARN:oeja.AnnotationParser:EXCEPTION 
java.lang.ArrayIndexOutOfBoundsException: 1612
    at org.objectweb.asm.ClassReader.readClass(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:899)
    at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:755)
    at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:744)
    at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:744)
    at org.mortbay.jetty.plugin.MavenAnnotationConfiguration.doParse(MavenAnnotationConfiguration.java:73)
    at org.mortbay.jetty.plugin.MavenAnnotationConfiguration.parseWebInfClasses(MavenAnnotationConfiguration.java:52)
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:119)
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:468)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1237)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:298)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
    at org.eclipse.jetty.server.Server.doStart(Server.java:282)
    at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:520)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:365)
    at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:523)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    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:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:46)
    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:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我正在使用JDK8在OSX上的IntelliJ13.1


2
我认为你使用的ASM版本不支持Java 8。Jetty使用ASM扫描二进制类以查找注释。 - McDowell
3
谢谢,更新 jetty-maven-plugin 对我解决了问题。 - cebor
谢谢,我也遇到了同样的问题,使用jetty-maven-plugin 9.2.2.v20140723代替9.0.6.v20130930解决了这个问题。 - Schrodinger's'Cat
1
你使用的Jetty版本是什么?我正在使用8.1.16.v20140903,但问题仍然存在。 - Code Junkie
1
@CodeJunkie 我也遇到了与 Jetty 8.1.2.v20120308 相同的问题,就像 @Schrodinger's'Cat 所说的那样,你可以升级到9.2.2版本,这应该会解决问题。 - tonix
2个回答

4

当我在 jetty 8.12.x 上部署应用程序时,遇到了这个问题。 通过升级到 jetty 9.2.x,我解决了这个问题。(是的,应用程序中使用了lambda表达式)


3
我遇到了和这个问题相关的情况,因此我阅读了很多关于此问题的页面。
对我来说,解决方案很简单,但很难找到。我使用jetty-8.1.10与asm-3.3.1和primefaces-5.1。
当您在任何带注释的类中或由这些类引用的任何类中拥有lambda表达式时,问题就会出现。
只需要将代码从Java 8兼容性更改为Java 7兼容性(在普通Java 7代码中使用lambda表达式),警告就会消失。只有通过调试org.objectweb.asm.ClassReader才能实现这一点。
干杯!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接