我已经尝试过几次重新安装Java,但是一旦启动我的应用程序就会崩溃。其他应用程序工作正常(例如,Scenebuilder)。
JVM不返回错误日志文件,唯一可以获取的是:
WERF81A.tmp.WERInternalMetadata.xml
WER403.tmp.dmp
WER461.tmp.cab
WER3D3.tmp.appcompat.txt
hs_error_*
文件完全缺失(或者我无法找到它)。
这是WERF81A.tmp.WERInternalMetadata.xml
<ProcessInformation>
<Pid>6740</Pid>
<ImageName>javaw.exe</ImageName>
<CmdLineSignature>00000000</CmdLineSignature>
<Uptime>6105</Uptime>
<ProcessVmInformation>
<PeakVirtualSize>4891078656</PeakVirtualSize>
<VirtualSize>4882821120</VirtualSize>
<PageFaultCount>82469</PageFaultCount>
<PeakWorkingSetSize>195358720</PeakWorkingSetSize>
<WorkingSetSize>183607296</WorkingSetSize>
<QuotaPeakPagedPoolUsage>277440</QuotaPeakPagedPoolUsage>
<QuotaPagedPoolUsage>261216</QuotaPagedPoolUsage>
<QuotaPeakNonPagedPoolUsage>43232</QuotaPeakNonPagedPoolUsage>
<QuotaNonPagedPoolUsage>43168</QuotaNonPagedPoolUsage>
<PagefileUsage>564998144</PagefileUsage>
<PeakPagefileUsage>574984192</PeakPagefileUsage>
<PrivateUsage>564998144</PrivateUsage>
</ProcessVmInformation>
</ProcessInformation>
<ProblemSignatures>
<EventType>APPCRASH</EventType>
<Parameter0>javaw.exe</Parameter0>
<Parameter1>7.0.250.17</Parameter1>
<Parameter2>51c4b1ff</Parameter2>
<Parameter3>USER32.dll</Parameter3>
<Parameter4>6.2.9200.16420</Parameter4>
<Parameter5>505a9a92</Parameter5>
<Parameter6>c0000005</Parameter6>
<Parameter7>000000000003185a</Parameter7>
</ProblemSignatures>
Windows错误报告对话框提供了两个选项:
exit code 255
该应用程序使用最新的jdk7u25
。
该应用程序使用JavaFX 2(工作的Scenebuilder应用程序也是如此)。除了上面发布的内容之外,没有错误日志或代码!
如果以管理员身份运行,应用
任何帮助表示感谢。
答案 0 :(得分:1)
我会将此作为评论发布,但我没有足够的代表。首先,您能告诉我们您正在运行的Windows版本吗? 98/2000 / XP / VISTA / 7/8?
将您的应用程序带到另一台计算机(具有相同的操作系统)并查看它是否也崩溃。如果是,请尝试来自不同系列的另一个操作系统(linux / mac)。如果问题被隔离到特定的OS系列,那么问题可能取决于程序中的特定方法调用。如果它只是你的计算机,那么调试就变得更加困难。如果所有OS系列都出现此问题,则怀疑是JVM错误。
如果您使用的是Windows Vista / 7,请尝试关闭UAC。您的用户配置文件权限可能阻止java访问关键库(从错误转储User32.dll?)。如果这确实解决了您的问题,请再次尝试使用具有不同UAC级别的您和另一台计算机,并检查问题是否与特定计算机/ UAC级别隔离。
在应用程序启动期间监视系统内存和堆大小,可能只是您的应用程序实际填写了JVM没有内存来生成hs_error_ *文件的所有可用RAM(这在我身上发生了)前)。
如果所有其他方法都失败了,我建议使用调试器来确定应用程序失败的位置。也许坚持使用System.exit(0);在程序的不同部分,看它是否在崩溃之前执行到该部分。还要确定崩溃是否可预测(即在同一点失败而不是随机失败)。可预测的崩溃表明代码触发了崩溃。如果您正在使用JNI,请使用虚拟方法暂时禁用它们,以查看崩溃是否仍然发生。
这就是我所能说的所有......这可能是十亿个理由,希望你找到那个。