【问题标题】:CodenameOne Gui Builder NPE Crash in Intellij IdeaIntellij Idea 中的 CodenameOne Gui Builder NPE 崩溃
【发布时间】:2017-12-03 05:32:15
【问题描述】:

* 以下更新*

也许我在这里做错了什么,但如果是这样,我不清楚是什么。这是一个已知的问题?我是否应该寻找特定的地方以了解是否存在未满足的依赖项等(如 Java 版本或 IDE 版本或插件或?)。请帮忙。

场景:

  • 我有最新的 IntelliJ Idea 版本 (14.1.7)
  • Java 版本是 1.8.0_91 从 IDE 中的终端使用 java -version) 确认
  • 刚刚更新到CN1插件版本3.7.1
  • 刚刚开始了一个新项目来使用新的 GUI Builder。

重现的步骤如下:

  1. 我右键单击包并选择“新建表单”并为其命名
  2. 表单 java 文件和 .gui 文件已创建
  3. 我在java文件上右击选择“CN1->Gui Builder”

然后 Idea 会抛出一个错误事件 (NoSuchMethodError) 并包含以下详细信息:,并且 GUI Builder 不显示

堆栈跟踪:

com.intellij.openapi.vfs.VfsUtil.getChildren(Lcom/intellij/openapi/vfs/VirtualFile;Lcom/intellij/openapi/vfs/VirtualFileFilter;)Ljava/util/List;
java.lang.NoSuchMethodError: com.intellij.openapi.vfs.VfsUtil.getChildren(Lcom/intellij/openapi/vfs/VirtualFile;Lcom/intellij/openapi/vfs/VirtualFileFilter;)Ljava/util/List;
    at com.codename1.plugin.intellij.actions.GUIBuilderAction.actionPerformed(GUIBuilderAction.java:73)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:182)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter$1.run(ActionMenuItem.java:312)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:958)
    at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:124)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:282)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:109)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:512)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:44)
    at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:532)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:565)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

* 更新 * 根据一些好的建议,我意识到我的 Idea 版本有多旧,所以我已经升级到 2017.1.4。我删除并重新安装了 3.7 插件,我的测试项目仍然无法启动 GUI Builder,但现在有不同的错误和堆栈跟踪:

java.lang.IndexOutOfBoundsException: Index: 0
    at com.intellij.util.containers.ContainerUtilRt$EmptyList.get(ContainerUtilRt.java:308)
    at com.codename1.plugin.intellij.actions.GUIBuilderAction.actionPerformed(GUIBuilderAction.java:74)
    at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:215)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:232)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:309)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:929)
    at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:136)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:299)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:116)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:86)
    at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:109)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:118)
    at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:122)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:116)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:513)
    at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:45)
    at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:533)
    at java.awt.Component.processMouseEvent(Component.java:6541)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6306)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4897)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4719)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4719)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:737)
    at java.awt.EventQueue$4.run(EventQueue.java:735)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:827)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:651)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

【问题讨论】:

    标签: intellij-idea codenameone


    【解决方案1】:

    显然,您安装的插件版本 3.7.1 与 IntelliJ IDEA 14.1.7 不兼容。开发人员错误地指定它是兼容的,而没有执行实际测试。由于 14.1.7 已经很老了,以前没有人注意到这个问题。所以,要么更新到当前的 IntelliJ IDEA 版本,要么尝试手动安装一些较旧的插件版本或file a bug to the plug-in developer

    至于第二个问题,请check this answer

    【讨论】:

    • 啊啊啊我明白了。 IntelliJ Idea 在他们的帮助菜单上有一个“更新”按钮,我认为如果有新版本可用,它会通知我。显然,我的 IntelliJ Idea 版本已经落后了一段时间(只是在那个版本上打了补丁)。我现在正在从他们的网站下载新版本。谢谢!
    • 谢谢,我们会解决的。
    • 所以我安装了 Idea 2017.1.4,删除并重新添加了 codenameOne 插件,我的测试项目仍然失败,但出现了不同的错误。我将用该错误更新问题,希望它可能有助于找到一个共同的根本原因。
    • 感谢@CrazyCoder 的链接,但我已经查看了该答案,并在发布之前按照教程进行操作(在打扰他人之前,我会尽可能多地做功课)。我创建了一个新的 cn1 项目,然后创建了一个新表单,如教程帖子所示。仍然得到异常。
    • 我想我可能已经找到了。新项目错误地使用了旧的 SDK。感谢您帮助追查它。
    【解决方案2】:

    事实证明,我的 Idea 配置有一个较旧的 Java (Android!) SDK 配置为新项目的默认设置。这个默认值导致新项目 CREATION 做一些奇怪的事情,导致它无法使用 GUI Builder。仅在我的项目配置中修复不正确的 SDK 并不能使 GUI Builder 在预先存在的项目中工作;相反,我需要使用正确的 SDK 集创建一个新项目,然后它开始工作。也许有一个步骤可以强制 CodenameOne 在修复后“重新创建”或“重新生成”项目,但这对我来说并不明显。

    @Shai Almog,我希望这至少能给你一些关于这个问题是如何发生的线索,这样你就可以防止它在未来影响到其他人。现在我的问题已经解决了。感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多