Проблемы с доступом к классам Java из Javascript расширения Firefox - PullRequest
0 голосов
/ 19 мая 2009

Я собираюсь разработать расширение 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.

Где я не прав? Это возможная ошибка в движке Firefox-3.0.10 Javascript или я должен сделать что-то еще до получения метода main (...)?

Ответы [ 2 ]

1 голос
/ 19 мая 2009

при условии, что ваше полное имя класса «your.package.Firefox», вы можете сделать:

importPackage("your.package");

args = java.lang.reflect.Array.newInstance(java.lang.String.TYPE, 1);
Firefox.main(args)
0 голосов
/ 19 мая 2009

вы неправильно вызываете метод, используя;

[parameters.getClass()]

, который передает аргумент типа java.lang.Class [] в сигнатуру, которая ожидает объект String. просто передайте объект параметров как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...