2

我已经尝试过多次重新安装 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 错误报告对话框为我提供了 2 个选项:

  • 调试 -> 负退出代码
  • 关闭 ->exit code 255

该应用程序使用最新的jdk7u25. 该应用程序使用 JavaFX 2(工作的 Scenebuilder 应用程序也是如此)。除了上面发布的以外,没有错误日志或代码!

如果以管理员身份运行,该应用程序将运行!

任何帮助表示赞赏。

  • 视窗 8 x64
  • 在其他计算机上运行没有任何问题。
  • UAC 已关闭
  • 崩溃是可重现的。应用程序 gui 出现后 2-3 秒。
4

1 回答 1

1

我会将其发布为评论,但我没有足够的代表。首先,您能告诉我们您正在运行的 Windows 版本吗?98/2000/XP/Vista/7/8?

将您的应用程序带到另一台计算机(具有相同的操作系统)上,看看它是否也崩溃了。如果是,请尝试来自不同系列的另一个操作系统(linux/mac)。如果问题被隔离到特定的操作系统系列,那么问题可能取决于程序中的特定方法调用。如果它只是您的计算机,那么调试将变得更加困难。如果此问题发生在所有操作系统系列中,则怀疑是 JVM 错误。

如果您使用的是 Windows Vista/7,请尝试关闭 UAC。您的用户配置文件权限可能会阻止 java 访问关键库(来自错误转储 User32.dll?)。如果这确实解决了您的问题,请再次在您的和另一台具有不同 UAC 级别的计算机上进行试验,并检查问题是否与特定的机器/UAC 级别隔离。

在应用程序启动期间监视您的系统内存和堆大小,这可能只是您的应用程序实际上填充了 JVM 没有内存来生成 hs_error_* 文件的所有可用 RAM(这在我之前发生过)。

如果一切都失败了,我建议使用调试器来确定应用程序失败的地方。也许坚持一个 System.exit(0); 在程序的不同部分查看它是否在崩溃之前执行到该部分。还要确定崩溃是否是可预测的(即在同一点失败与随机失败)。可预测的崩溃表明代码中的某些内容触发了崩溃。如果您使用的是 JNI,请使用虚拟方法暂时禁用它们以查看崩溃是否仍然发生。

这就是我真正能说的......这可能是十亿个理由,希望你能找到一个。

于 2013-08-05T07:12:51.520 回答