1

SVG ファイルを swf ファイルに変換する Web アプリケーションがあります。そのためには、次の 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 - .AS 一時ファイル内の各 SVG を変換し、そこに情報を追加する

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);
}

私のログでは、多くのファイルでコンパイルが機能していることがわかります。しかし、「mxmlc コンパイラ呼び出し」行の後で JVM がクラッシュします。

そのため、問題はフレックス コンパイラに起因します。

いくつかのテストの後、「JVM クラッシュ レポート」を取得しました。

<?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 バージョン: flex_sdk_3.5.0.12683

[flex]/bin/jvm.config ファイルを含む「フル JDK」は使用しません。

それで、ここに私の質問があります: - jvm.config ファイル (または別のファイル) を追加して、mxmlc コンパイラをセットアップできますか? - 32 ビット jdk を使用する必要がありますか? (flex と 64 ビット jdk に関する問題があるようです) - swf に関して変換する他のコンパイラはありますか?

4

2 に答える 2

3

JDK を指定する必要がありますか、それとも JRE のみを使用できますか?

どちらも jvm.config 状態のコメントとして機能します:

JVM の場所。{java.home}/jre が存在する場合、その JVM が使用されます。そうでない場合は、JRE 自体へのパスである必要があります。

于 2011-06-06T14:26:12.497 に答える
2

mxmlc コンパイラには 32 ビット JVM が必要です。

同様の問題を回避するために私がしたことは、jdk の最新の 32 ビット バージョンをダウンロードし、その jdk を指すように jvm.config ファイルを変更することでした。

flex sdk bin ディレクトリの jvm.config から:

# If no java.home is specified a VM is located by looking in these places in this
# order:
#
#  1) JAVA_HOME environment variables (same rules as java.home above)
#  2) bin directory for java.dll (windows) or lib/<ARCH>/libjava.so (unix)
#  3) ../jre 
#  4) registry (windows only)
#
java.home=C:/apps_x86/Java/jdk1.6.0_21/
于 2010-09-16T14:32:30.553 に答える