2011-10-20 6 views
3
내가하여 JavaCompiler 인터페이스를 재생하려고

에서 생성 된 클래스로드 URLClassLoader의를 사용하여 :자바 : 런타임

class A<T extends TrackableObject>{ 

    } 

    public class JavaCompolierDemo { 

     /** 
     * @param args 
     * @throws IOException 
     */ 
     public static void main(String[] args) throws IOException { 
      File sourceFile = new File("c:\\java\\DOModel.java"); 
      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
      compiler.run(null, null, null, "-cp", System.getProperties().getProperty("java.class.path") + ";F:\\IndigoSpace\\ejp", sourceFile.getPath()); 
      System.out.println(new File("c:\\java\\").toURI().toURL()); 
      URLClassLoader loader = new URLClassLoader(new URL[]{new File("c:\\java\\").toURI().toURL()}); 
      try { 
       loader.loadClass("amarsoft.dbmp.credit.web.model.DOModel"); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

을하지만 위의 코드를 실행할 때의 ClassNotFoundException이 던져졌다 : 소스

file:/c:/java/ 
java.lang.ClassNotFoundException: amarsoft.dbmp.credit.web.model.DOModel 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at amarsoft.rcp.base.util.test.JavaCompolierDemo.main(JavaCompolierDemo.java:31) 

컴파일되는 코드 :

package amarsoft.dbmp.credit.web.model; 

import amarsoft.rcp.base.databinding.TrackableObject; 
import ejp.annotations.ConcreteTableInheritance; 

@ConcreteTableInheritance 
public class DOModel extends TrackableObject { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = -7066464988987508089L; 
    /** 
    * 编号 
    */ 
    private String id; 
    /** 
    * 名称 
    */ 
    private String name; 
    /** 
    * 模板类型,没有太大意义 
    */ 
    private String type; 
    /** 
    * 模板参数 
    */ 
    private String args; 

    private String updateTable; 

    private String updateWhere; 

    private String fromClause; 

    private String whereClause; 

    private String groupClause; 

    private String orderClause; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.firePropertyChange("id", this.id, this.id = id); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.firePropertyChange("name", this.name, this.name = name); 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.firePropertyChange("type", this.type, this.type = type); 
    } 

    public String getArgs() { 
     return args; 
    } 

    public void setArgs(String args) { 
     this.firePropertyChange("args", this.args, this.args = args); 
    } 

    public String getUpdateTable() { 
     return updateTable; 
    } 

    public void setUpdateTable(String updateTable) { 
     this.firePropertyChange("updateTable", this.updateTable, this.updateTable = updateTable); 
    } 

    public String getDoUpdateWhere() { 
     return updateWhere; 
    } 

    public void setDoUpdateWhere(String doUpdateWhere) { 
     this.firePropertyChange("updateWhere", this.updateWhere, this.updateWhere = doUpdateWhere); 
    } 

    public String getFromClause() { 
     return fromClause; 
    } 

    public void setFromClause(String fromClause) { 
     this.firePropertyChange("fromClause", this.fromClause, this.fromClause = fromClause); 
    } 

    public String getWhereClause() { 
     return whereClause; 
    } 

    public void setWhereClause(String whereClause) { 
     this.firePropertyChange("whereClause", this.whereClause, this.whereClause = whereClause); 
    } 

    public String getGroupClause() { 
     return groupClause; 
    } 

    public void setGroupClause(String groupClause) { 
     this.firePropertyChange("groupClause", this.groupClause, this.groupClause = groupClause); 
    } 

    public String getOrderClause() { 
     return orderClause; 
    } 

    public void setOrderClause(String orderClause) { 
     this.firePropertyChange("orderClause", this.orderClause, this.orderClause = orderClause); 
    } 

    @Override 
    public String toString() { 
     return "DOModel [id=" + id + ", name=" + name + "]"; 
    } 


} 

내 코드에는 어떤 것이 있습니까? 클래스 파일이 생성되었으므로 확실합니다. enter image description here

답변

4

필수 클래스의 패키지 이름은 같은 이름의 파일 시스템 경로에서 찾아야합니다. DOModel 클래스는 amarsoft.dbmp.credit.web.model의 파일 시스템 경로에 있어야합니다. C:\\java\\amarsoft\\dbmp\\credit\\web\\model\\DOModel.class

+0

감사합니다! 15 자 – CaiNiaoCoder