java - 在 Java 中调用的 Flex 编译器 mxmlc 导致 64 位 JVM 崩溃 (dcpr.dll)

标签 java apache-flex jvm mxmlc

我有一个将 SVG 文件转换为 swf 文件的网络应用程序。 为此,有 3 个步骤: 1 - 运行文件夹中的 SVG 文件

for (final File file : tFiles) {
final String fileName = file.getName();

      final int nbEr = flashEngine.convert(fileName);
      if (nbEr > 0) {
            LOG.error("Error with SVG file : " + fileName);
      }
file.delete();
}

2 - 将每个 SVG 转换为 .AS 临时文件并在其中添加信息

public final int convert(final String svgName) {
    // *****************
    // DIVERS TREATMENTS
    // *****************
    final int nbError = computeSwf(svgName);

    // ******************
    // DIVERS TREATMENTS
    // ******************
    return nbError;
}

3 - 借助 Mxmlc 编译器将 .as 转换为 .swf

private int computeSwf(final String svgName) {
    final String[] argscompiler = new String[5];
    argscompiler[0] = "+flexlib";
    argscompiler[1] = [flex framework path : /flex/frameworks];
    argscompiler[2] = [temporary .as file path];
    argscompiler[3] = "-output"; // output folder path
    argscompiler[4] = [output file name thanks to svgName];

    flex2.tools.Compiler.mxmlc(argscompiler);
    return ThreadLocalToolkit.errorCount();
}

大多数时候,一切正常。 但是,在某些情况下,整个 JVM 会在没有警告的情况下崩溃。

我添加了有关 mxmlc 编译器调用的日志:

try {
    LOG.info("mxmlc compiler calling");
    flex2.tools.Compiler.mxmlc(argscompiler);
    LOG.info("mxmlc compilation finished");
} catch (final Throwable e) {
    LOG.fatal(e, e);
}

在我的日志中,它向我显示对于很多文件,编译工作正常。 但是 JVM 在“mxmlc 编译器调用”行之后崩溃了。

所以,问题来自 flex 编译器。

经过一些测试,我得到了一份“JVM Crash 报告”:

<?xml version="1.0" encoding="UTF-16"?>
<WERReportMetadata>
    <OSVersionInformation>
        <WindowsNTVersion>6.1</WindowsNTVersion>
        <Build>7600 </Build>
        <Product>(0x30): Windows 7 Professional</Product>
        <Edition>Professional</Edition>
        <BuildString>7600.16539.amd64fre.win7_gdr.100226-1909</BuildString>
        <Revision>1</Revision>
        <Flavor>Multiprocessor Free</Flavor>
        <Architecture>X64</Architecture>
        <LCID>1036</LCID>
    </OSVersionInformation>
    <ParentProcessInformation>
        <ParentProcessId>2052</ParentProcessId>
        <ParentProcessPath>C:\Java\jre6\bin\javaw.exe</ParentProcessPath>
        <ParentProcessCmdLine>C:\Java\jre6\bin\javaw.exe -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:59809 -Dcatalina.base=C:\Workspaces\Eclipse\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 -Dcatalina.home=C:\Tomcat55 -Dwtp.deploy=C:\Workspaces\Eclipse\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps -Djava.endorsed.dirs=C:\Tomcat55\common\endorsed -Xms512M -Xmx1024M -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -classpath C:\Workspaces\Eclipse\[MY PROJECT]\webcontent\WEB-INF\lib\wsdl4j-1.5.1.jar;C:\Tomcat55\bin\bootstrap.jar org.apache.catalina.startup.Bootstrap start</ParentProcessCmdLine>
    </ParentProcessInformation>
    <ProblemSignatures>
        <EventType>APPCRASH</EventType>
        <Parameter0>java.exe</Parameter0>
        <Parameter1>6.0.200.2</Parameter1>
        <Parameter2>4bc39549</Parameter2>
        <Parameter3>dcpr.dll</Parameter3>
        <Parameter4>6.0.200.2</Parameter4>
        <Parameter5>4bc3ace7</Parameter5>
        <Parameter6>c00000fd</Parameter6>
        <Parameter7>000000000000dacc</Parameter7>
    </ProblemSignatures>
    <DynamicSignatures>
        <Parameter1>6.1.7600.2.0.0.256.48</Parameter1>
        <Parameter2>1036</Parameter2>
        <Parameter22>dfc4</Parameter22>
        <Parameter23>dfc49eb22582397c699a9ef43341068a</Parameter23>
        <Parameter24>7fc1</Parameter24>
        <Parameter25>7fc14f899de80bb4d59ec0501e30665b</Parameter25>
    </DynamicSignatures>
    <SystemInformation>
        <MID>961D9682-D49E-4725-9224-B2748025A619</MID>
        <SystemManufacturer>Dell Inc.</SystemManufacturer>
        <SystemProductName>OptiPlex 780</SystemProductName>
        <BIOSVersion>A03</BIOSVersion>
    </SystemInformation>
</WERReportMetadata>

如您所见,dcpr.dll (Sun Java dll) 似乎崩溃了。 我已经遇到过这样的问题,但是通过从 jdk 1.5 升级到 1.6 解决了这个问题。 看来这不是一个真正的解决方案:s

信息: Java 版本:JDK 1.6.0.20 64 位 弹性版本:flex_sdk_3.5.0.12683

我不使用带有 [flex]/bin/jvm.config 文件的“完整 JDK”。

所以,这是我的问题: - 我可以简单地添加一个 jvm.config 文件(或另一个文件)来设置 mxmlc 编译器吗? - 我必须使用 32 位 jdk 吗? (好像有关于flex和64位jdk的问题) - 是否有其他编译器可以转换为 swf?

最佳答案

Do we have to point a JDK or can I just use a JRE ?

两者都将作为 jvm.config 状态中的注释工作:

Where to find JVM, if {java.home}/jre exists then that JVM is used if not then it must be the path to the JRE itself

关于java - 在 Java 中调用的 Flex 编译器 mxmlc 导致 64 位 JVM 崩溃 (dcpr.dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469777/

相关文章:

java - 如何将普通位图转换为单色位图android

javascript - 网站加载 javascript 后如何解析网站?

java - 解决 Codility PermMissingElem 测试的正确方法是什么? ( java )

java - 从jvm字节码生成java类文件头

java - 有没有办法增加代码本身的 Java 堆空间?

java - 如何调用EJB

java - Apache Airflow 任务 : java: command not found

apache-flex - 带有单个切片的饼图标签

java - "Invalid byte 1 of 1-byte UTF-8 sequence"错误

apache-flex - 完整 Flex 网站的 SEO