Je vais développer une extension Firefox qui utilise des classes Java. L'extension obtient la valeur de <input type="file">
champs, en utilisant Javascript.Problème d'accès aux classes Java depuis l'extension Firefox de Firefox
La classe Java Je vais créer est la suivante:
public class Firefox {
public static String inFileName;
public static void main(String[] args) throws IOException {
inFileName = "";
try {
inFileName = args[0];
} catch (Exception ex) {}
}
Javascript, je dois utiliser la réflexion Java pour accéder aux classes Java.
De cette manière, je peux créer mon objet Java:
var fileInput = e.explicitOriginalTarget; // is an object HTMLInputElement, I get this when a file is selected
strArray = java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.net.URL"),3);
classLoader = java.net.URLClassLoader.newInstance(strArray);
parameters = java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.lang.String"),1);
parameters[0]= fileInput.value;
var aClass = java.lang.Class.forName("Firefox", true, classLoader);
var aStaticMethod = aClass.getMethod("main", [parameters.getClass()]); //gets the main(String[] args) method, here I get the exception*
var myJava = aStaticMethod.invoke(null, [parameters]); //invokes the main method
J'ai essayé cette extension sur Firefox 3.5b4-et tout va bien, mais quand je l'essayer sur Firefox-3.0.10 I obtenir l'exception suivante *:
`InternalError: Unable to convert JavaScript value class [Ljava.lang.String; to Java value of type java.lang.Class[]`
Par exemple, mettre la ligne suivante avant la principale méthode invokation:
alert(parameters + " - " + parameters[0]);
sur les deux Firefox 3.0.10 et-3.5b4 je reçois une fenêtre d'alerte qui dit:
`[Ljava.lang.String;@194ca6c - /root/demo.pdf` //demo.pdf is the selected file
Mais seulement 3.0.10 je reçois l'exception, seulement sur ma machine GNU/Linux. Sur Windows XP, je n'ai aucun problème sur les deux versions de Firefox!
Notez que sur Windows et Linux, la version plug-in Java est 6 update 13.
Où suis-je tort? Est-ce un bug possible sur Firefox-3.0.10 Javascript ou devrais-je faire autre chose avant d'obtenir la méthode principale (...)?
publique Méthode getMethod (String name, classe > ... parameterTypes) lancers francs NoSuchMethodException, SecurityException I Je suppose qu'il a raison. – alamar
maintenant je reçois cette exception: InternalError: Impossible de convertir la valeur JavaScript en valeur Java de type java.lang.Class [] – Giancarlo
essayez de modifier les deux lignes réfléchissantes en; var aStaticMethod = aClass.getMethod ("principal", paramètres.getClass()); // obtient la méthode principale (String [] args), ici, j'obtiens l'exception * var myJava = aStaticMethod.invoke (null, parameters); en supprimant les initialiseurs [] car ils semblent déjà avoir été créés par l'appel de réflexion. – simon622