2010-08-12 5 views
1

J'ai une application web qui convertit les fichiers SVG en fichiers swf. Pour le faire, il y a 3 étapes: 1 - Franchissement SVG fichiers dans un dossierLe compilateur Flex, mxmlc, appelé en Java fait 64bits crash 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 - Conversion de chaque SVG dans un fichier temporaire .AS et en ajoutant les informations dans ce

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

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

3 - Conversion e .as en .swf grâce au compilateur 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(); 
} 

la plupart du temps, tout fonctionne bien. Toutefois, dans certains cas, l'intégralité de la JVM se bloque sans avertissement.

j'ai ajouté les journaux autour de l'appel du compilateur 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); 
} 

Dans mes journaux, il me montre que pour beaucoup de fichiers, les travaux de compilation. Mais la JVM tombe en panne, après une ligne "mxmlc compiler calling". Par conséquent, les problèmes proviennent du compilateur Flex.

Après quelques essais, j'ai obtenu un "rapport 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> 

Comme vous pouvez le voir, il semble que le dcpr.dll (dll Sun Java) se bloque. J'ai déjà eu un problème comme celui-ci, mais il a été résolu en passant de jdk 1.5 à 1.6. Il semble que ce n'est pas une véritable solution: s

Info: version Java: JDK 64 bits 1.6.0.20 version Flex: flex_sdk_3.5.0.12683

je ne pas utiliser le "plein JDK" , celui avec le fichier [flex] /bin/jvm.config. Donc, voici mes questions: - est-ce que je peux simplement ajouter un fichier jvm.config (ou un autre), pour mettre en place le compilateur mxmlc? - dois-je utiliser un jdk 32 bits? (il semble qu'il existe des problèmes concernant flex et 64 bits jdk) - y at-il d'autres compilateur à convertir en swf?

Répondre

2

Le compilateur mxmlc requiert une machine virtuelle Java 32 bits. Ce que j'ai fait pour contourner un problème similaire était de télécharger la dernière version 32 bits de jdk et de changer le fichier jvm.config pour qu'il pointe vers ce jdk.

De l'jvm.config dans le répertoire bin sdk flex:

# 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

Merci. J'ai oublié d'écrire la solution. J'ai fait ce que tu dis il y a quelques semaines. Cela a résolu mon problème. –

+0

Devons-nous pointer un JDK ou puis-je simplement utiliser un JRE? Y at-il des problèmes connus lorsque l'application Web est hébergée sur un système d'exploitation Win 64 bits, sur Tomcat 6.0.29 64 bits? Pourriez-vous également me dire comment obtenir le stacktrace? J'ai mis à vrai le "verbose stack trace", mais je ne reçois rien. Merci –

+0

Je suis sur Windows 7 64 bits, et j'ai dû supprimer le chemin java.home du fichier jvm.config et le mettre dans les variables Windows JAVA_HOME et cela a fonctionné. Pour le chemin j'ai utilisé C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.5/jre. Je ne sais pas pourquoi le fichier jvm.config n'a pas fonctionné ... – chobo

3

Doit-on pointer un JDK ou peut-je utiliser un JRE?

soit fonctionnera comme les commentaires dans les Etats jvm.config:

Où trouver JVM, si {java.home}/jre existe alors que JVM est utilisé si ce n'est pas le cas, il doit être le chemin vers le JRE lui-même

Questions connexes