我打算開發一個使用某些Java類的Firefox擴展。 擴展名使用Javascript獲取<input type="file">
字段的值。從Firefox擴展的Javascript訪問Java類時遇到困難
的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[]`
例如,把下面這行的主要方法invokation前:
alert(parameters + " - " + parameters[0]);
兩個火狐-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(...)方法之前我是否還需要做其他事情?
公共方法getMethod(字符串名稱,> 類... parameterTypes) 拋出NoSuchMethodException, 拋出:SecurityException 我猜猜他是對的。 – alamar 2009-05-19 08:36:06
現在我得到這個異常: InternalError:無法將JavaScript值轉換爲java.lang.Class類型的Java值[] – Giancarlo 2009-05-19 08:36:48