2011-10-04 2 views
0

나는 lotusnotes db에서 양식을 추출하는 Java 프로그램을 작성하고 있습니다. 양식을 얻을 때마다 양식과 이름이 같은 클래스를 포함하는 .java 파일을 작성해야합니다. 그럼 나 .class 파일 & .class 파일을주는이 새로운 .java 클래스를 컴파일해야한다. 그래서 나는 그 새로운 클래스의 인스턴스를 만들 수있다. 이 새로운 접근법을 생성하고 컴파일하는 것이 기존의 하나의 자바 프로그램에서 가능하다는 것을 알아야합니다.기존 Java 프로그램에서 새 Java 프로그램의 인스턴스를 컴파일하고 작성하십시오.

내 의사는

import java.util.Iterator; 
import de.bea.domingo.*; 
import java.util.List; 
import java.io.*; 
public class LotusNotesDBExtraction 
{ 
public static void main(String[] args) throws DNotesException,IOException 
{ 
    DNotesFactory factory = DNotesFactory.getInstance(); 
    DSession session = factory.getSession(); 
    DDatabase database = session.getDatabase("", "employee.nsf"); 
    List formlist=database.getForms(); 
    //System.out.println("Number of forms are :"+formlist.size()); 
    for(int i=0;i<formlist.size();i++) 
    { 
     DForm formn=(DForm)(formlist.get(i)); 
     DForm formname= database.getForm(formn.getName()); 

     **//Creating a class in a file 
     FileWriter outputfile = new FileWriter("D:\\Lotusnotesformfiles\\"+formn.getName()+".java",true); 
     BufferedWriter out = new BufferedWriter(outputfile); 
     out.write("public class "+formn.getName()+" {"); 
     out.newLine(); 
     out.flush();** 

     try 
     { 
      **//Compile the class here** 
          Process p1 = Runtime.getRuntime().exec("cmd javac \"D:\\Lotusnotesformfiles\\"+formn.getName()+".java\""); 
      System.out.println("compiled"); 
     } 
      catch(IOException x) 
     { 
      x.printStackTrace(); 
     } 
       **//instantiate the new class here** 
} 
} 

아래로 간다하지만 새로운 클래스의 .class 파일을 얻을 수 없습니다입니다. 동일한 프로그램에서 새 클래스를 인스턴스화 할 수 있습니까 ?? 나는이 시점에서 붙어 있었다. 어떤 도움을 주시겠습니까

+0

이것은 답변이 아니지만 동일한 프로그램에서 사용할 수있는 각 양식의 수업을 원하는 이유가 무엇입니까? 어떻게 그 수업을 사용하고 싶니? – michael667

+0

양식의 각 문서에 대한 개체를 만들어 salesforce db에서 데이터를 덤프 할 다른 사람에게 전달해야합니다. –

+0

_instance_ (개체) 또는 _class_를 만들시겠습니까? – michael667

답변

0

Reflection API을 사용하면이 모든 것을 전부는 아니지만 많은 것을 할 수 있어야합니다. 런타임에 클래스를 수정하고 내용을 검사하며 클래스를 동적으로로드 할 수 있습니다 (예 : 편집).

+0

리플렉션 API를 사용하지 않고이 작업을 수행합니까? –

+0

Relection API는 이러한 종류의 문제를 해결하기 위해 제작되었습니다. 따라서 Reflection API가 없으면 실제로이 작업을 수행 할 수 없습니다. 이는 JVM이 시작되는 방법과'.class' 파일이로드되어 사용 가능하게되는 시점과 관련이 있습니다. 리플렉션 API를 사용하면 JVM 수명이 시작될 때만 앱이 실행되는 동안'.class' 파일을로드 할 수 있습니다. – jefflunt

관련 문제