构建Sencha / ExtJS 5项目时的java.lang.StackOverflowError

时间:2014-11-13 14:33:41

标签: java javascript eclipse extjs

当我打开我的项目并且Eclipse尝试构建它时,我收到此错误:在“构建工作区”期间发生内部错误。 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 个答案:

答案 0 :(得分:2)

JstMixedType似乎累积了多种类型并连接了它们的名称。在你的情况下它包含自己(或自己的代理,确切地说)。这不应该发生。这似乎是VJET核心中的一个错误,应该是reported

您可以通过调整配置/代码来解决这个问题。你有自己的混合类型吗?这是有意的吗? (可能是)如果不是,请改变它们。

答案 1 :(得分:0)

如何处理StackOverflowError:

最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示递归调用的代码。一旦检测到这些行,就必须仔细检查代码并理解递归永远不会终止的原因。


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

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

顺便说一下,它似乎是一个已经在最新版本中修复的日食错误(阅读此ref)。