2012-04-01 58 views
1

我试图从的.jar找不到阵列的声明符号类[]

调用方法,但是,当我要声明params用于在getDeclaredMethod的阵列我有一个错误的“无法找到符号”

Class[] params = new Class[]{ String }; 
          ^

全法

public void CallCloseWindow(String title){ 
     //export dll 
     InputStream in = staticapi.class.getResourceAsStream("CloseWindow.dll"); 
     File fileOut = new File(System.getProperty("C:\\Java\\CloseWindow.dll")); 
     OutputStream out = new FileOutputStream(fileOut); 
     int c; 
     while ((c = in.read()) != -1) { 
      out.write(c); 
     } 
     in.close(); 
     out.close(); 
     //call from jar class 
     Class[] params = new Class[]{ String }; 
     Object[] parms = new Object[] { new String(title) }; 
     URL url=new URL("jar:file:/callapi.jar/"); 
     URLClassLoader ucl = new URLClassLoader(new URL[] { url }); 
     Class obj = Class.forName("callapi.callapi", true, ucl); 
     Method m = obj.getDeclaredMethod("CloseWindow",params); 
     Object instance = obj.newInstance(); 
     Object result = m.invoke(instance,parms); 
    } 

什么问题?String.TYPE无法正常工作或

回答

4

试着用Class[] params = new Class[]{ String.class };

+0

这是Java?什么样的构造是 - 'new Class [] {String.class}' – Coffee 2012-04-01 19:08:51

+1

是的,它是Java,你只用一个元素(String.class)构造一个Class数组。 – Fido 2012-04-01 19:10:27

+1

@Adel:这是完全标准的Java(但是你引用的位不完整,没有'new'就没有意义了)。 – NPE 2012-04-01 19:10:39

1

尝试:

Class[] params = new Class[]{ String.class }; 
2

正如其他人所指出的那样,你只是错过了.class。当初始化声明时,无需调用new虽然:

Class[] params = { String.class }; 

应该没问题。 (这是唯一的,如果你重新初始化数组以后,或者如果你的实例创建一个匿名数组,你需要new

事实上,你并不需要创建在所有params阵列。由于Class.getDeclaredMethodsvararg method你可以做

Method m = obj.getDeclaredMethod("CloseWindow", String.class); 
               \__________/ 
                | 
     this will be transformed to a Class[] on the fly by the constructor