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?
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. –
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 –
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