在构建Sencha/ExtJS 5项目时遇到java.lang.StackOverflowError错误

6

当我打开我的项目并尝试在Eclipse中构建它时,出现了以下错误: "Building workspace"期间发生了内部错误。 java.lang.StackOverflowError。

它仍然完成构建(我想),我可以继续进行。但是我会收到一个“内部错误”弹出窗口,指出发生了堆栈溢出,并建议我退出工作台。我只是忽略这个弹出窗口。

这是我的.log输出:

!SESSION 2014-11-13 09:22:21.634 -----------------------------------------------
eclipse.buildId=4.4.0.I20140606-1215
java.version=1.7.0_51
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data C:\Workspaces\pvmui-ws3

!ENTRY org.eclipse.egit.ui 2 0 2014-11-13 09:22:31.052
!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level
Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory.
The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in
this system level configuration. The Git installation location can be configured on the
Team > Git > Configuration preference page's 'System Settings' tab.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

!ENTRY org.eclipse.egit.ui 2 0 2014-11-13 09:22:31.057
!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\XXXXXX'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

!ENTRY org.eclipse.core.jobs 4 2 2014-11-13 09:24:25.196
!MESSAGE An internal error occurred during: "Building workspace".
!STACK 0
java.lang.StackOverflowError
    at org.eclipse.vjet.dsf.jst.declaration.JstProxyType.getName(JstProxyType.java:105)
    at org.eclipse.vjet.dsf.jst.declaration.JstMixedType.getName(JstMixedType.java:75)
    **THESE TWO LINES REPEAT ABOUT 1023 TIMES**

!ENTRY org.eclipse.vjet.eclipse.core 4 0 2014-11-13 09:24:26.431
!MESSAGE There is no jst2dltk translator for node: org.eclipse.vjet.dsf.jst.term.ObjLiteral

!ENTRY org.eclipse.vjet.eclipse.core 4 0 2014-11-13 09:24:26.510
!MESSAGE There is no jst2dltk translator for node: org.eclipse.vjet.dsf.jst.term.ObjLiteral

!ENTRY org.eclipse.ui 4 4 2014-11-13 09:24:27.036
!MESSAGE Conflicting handlers for org.eclipse.vjet.eclipse.debug.ui.launchShortcut.run: {org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension$LaunchCommandHandler@6436afd6} vs {org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension$LaunchCommandHandler@42523e00}

我应该怎样避免这个问题?
2个回答

2

JstMixedType 似乎会累积多个类型并拼接它们的名称,在您的情况下,它包含它自己(或者说是一个围绕它自己的代理)。这不应该发生。这似乎是 VJET 核心中的一个 bug,应该进行报告

可能您可以通过调整配置/代码来解决此问题。您是否有包含自身的混合类型? 这是有意为之吗?(可能是)如果否,那就修改它们。


0
如何处理StackOverflowError:
最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示正在递归调用的代码。一旦您检测到这些行,您必须仔细检查您的代码并理解为什么递归永远不会终止。

如果您已经验证了递归的正确实现,那么您可以增加堆栈的大小,以允许更多的调用。根据安装的Java虚拟机(JVM),默认线程堆栈大小可能等于512KB或1MB。您可以使用-Xss标志来增加线程堆栈大小。该标志可以通过项目配置或命令行指定。 -Xss参数的格式为:

-Xss<size>[g|G|m|M|k|K]

顺便提一下,这似乎是一个 Eclipse 的 bug(请参阅ref),已在最新版本中修复。


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