2010-08-12 72 views
1

我有一個將SVG文件轉換爲swf文件的web應用程序。 爲了做到這一點,有3個步驟:1 - 通過SVG文件的文件夾中運行在Java中調用的Flex編譯器mxmlc會導致64位JVM崩潰(dcpr.dll)

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編譯

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崩潰。

所以,問題來自flex編譯器。

一些測試後,我獲得了 「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了。 看來,這不是一個真正的解決方案:■

信息: Java版本:JDK 1.6.0.20 64位 Flex的版本:flex_sdk_3.5.0.12683

我不使用 「全JDK」 ,其中包含[flex] /bin/jvm.config文件。

所以,這裏是我的問題: - 我可以簡單地添加一個jvm.config文件(或另一個),以設置mxmlc編譯器? - 我必須使用32位jdk嗎? (似乎有關於flex和64位jdk的問題) - 是否有其他編譯器轉換爲swf?

回答

2

mxmlc編譯器需要32位JVM。

我爲解決類似問題所做的工作是下載最新的32位版本的jdk,並將jvm.config文件更改爲指向該jdk。

從在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/ 
+0

謝謝。我忘了寫解決方案。我幾星期前就做了你提到的。它解決了我的問題。 – 2010-09-17 12:07:37

+0

我們必須指出一個JDK,還是隻能使用JRE?當Web應用程序託管在Win 64位操作系統上的Tomcat 6.0.29 64位上時是否存在一些已知問題?你能否也請告訴我如何獲得堆棧跟蹤?我設置爲真正的「詳細堆棧跟蹤」,但我什麼都沒有得到。感謝 – 2010-10-13 12:38:27

+0

我在Windows 7 64位,我不得不從jvm.config文件中刪除java.home路徑,並把它放在Windows變量JAVA_HOME和它的工作。對於我使用C:/ Program Files(x86)/ Adob​​e/Adob​​e Flash Builder 4.5/jre的路徑。我不知道爲什麼jvm.config文件不起作用... – chobo 2012-01-05 18:57:51

3

我們有指向一個JDK或者我可以只使用一個JRE?

要麼將​​工作作爲jvm.config各國的意見:

在哪裏可以找到JVM,如果{爪哇。如果不是那麼它必須是JRE本身的路徑