Я собираюсь разработать расширение для Firefox, которое использует некоторые классы Java. Расширение получает значение <input type="file">
полей, используя Javascript.
Класс Java, который я собираюсь создать, выглядит следующим образом:
public class Firefox {
public static String inFileName;
public static void main(String[] args) throws IOException {
inFileName = "";
try {
inFileName = args[0];
} catch (Exception ex) {}
}
В Javascript мне нужно использовать отражение Java, чтобы получить доступ к классам Java.
Таким образом я могу создать свой объект 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
Я пробовал это расширение в Firefox-3.5b4, и все идет нормально, но когда я пробую его в Firefox-3.0.10, я получаю следующее исключение*:
`InternalError: Unable to convert JavaScript value class [Ljava.lang.String; to Java value of type java.lang.Class[]`
Например, поместив следующую строку перед вызовом основного метода:
alert(parameters + " - " + parameters[0]);
как в Firefox-3.0.10, так и в 3.5b4 я получаю окно предупреждения, в котором говорится:
`[Ljava.lang.String;@194ca6c - /root/demo.pdf` //demo.pdf is the selected file
Но только в 3.0.10 я получаю исключение, ТОЛЬКО на моей машине с GNU/Linux. Вместо этого в Windows XP у меня нет проблем с обеими версиями Firefox!
Обратите внимание, что и в Windows, и в Linux версия подключаемого модуля Java — 6, обновление 13.
Где я не прав? Это возможная ошибка в движке Javascript Firefox-3.0.10 или я должен сделать что-то еще, прежде чем получить метод main(...)?