2014-12-09 4 views
0

이 수트 클래스는 클래스를로드하고 메소드의 수를 인쇄합니다. 로드하려는 클래스의 정확한 이름을 지정하면 클래스가 팬텀이라고 표시됩니다. 또한 클래스가 존재하지 않으면 동일한 메시지를 제공합니다. 내가 뭘 잘못하고 있는지 모르겠다.수트가 항상 말하는 이유 왜로드하고 싶은 클래스가 존재하지 않을 때라도 팬텀 클래스입니다.

public class Loader { 
    public static void main(String args[]){ 

      List<String> projectPaths; 
      String classPath; 
      String highLevelPackageName; 
      classPath = "C:\\Users\\Alastair\\workspace1\\Interview\\bin"; 

      projectPaths = new ArrayList<String>(); 

      projectPaths.add(classPath); 

      Options.v().set_allow_phantom_refs(true); 
      Options.v().set_whole_program(true); 
      Options.v().set_app(true); 
      Options.v().set_no_bodies_for_excluded(true); 
      Options.v().set_process_dir(projectPaths); 

      String previousClassPath = Scene.v().getSootClassPath(); 
      previousClassPath += ";" + classPath; 

      Scene.v().setSootClassPath(previousClassPath); 



      SootClass sootClass = Scene.v().loadClassAndSupport("Diagonal.class"); 

      sootClass.setApplicationClass(); 
      System.out.println(sootClass.getMethodCount()); 
    } 
} 

로드하려고하는 클래스입니다.

public class Diagonal { 

    public static void main(String args[]) { 
     diagonal(); 
     lefttriangle(); 
     righttriangle(); 
     tree(); 
    } 

    public static void diagonal() { 
     for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 5; j++) { 
       if (i == j) { 
        System.out.print("*"); 
       } else { 
        System.out.print(" "); 
       } 
      } 
      System.out.println(""); 
     } 
    } 

    public static void lefttriangle() { 
     for(int i=0;i<6;i++){ 
      for(int j=0;j<6;j++){ 
       if(j<=i){ 
        System.out.print("*"); 
       } 
       else{ 
        System.out.print(" "); 
       } 
      } 
      System.out.println(""); 
     } 
    } 

    public static void righttriangle(){ 
     for(int i=0;i<7;i++){ 
      for(int j=7;j>0;j--){ 
       if(i<j){ 
        System.out.print(" "); 
       }else{ 
        System.out.print("*"); 
       } 

      } 
      System.out.println(""); 
     } 
    } 

    public static void tree(){ 
     for(int i=1;i<=7;i++){ 
      for(int j=7;j>i;j--){ 
        System.out.print(" "); 
      } 
      for(int j = 1; j < i*2; j++){ 

        System.out.print("*"); 

      } 
      System.out.println(""); 
     } 
    } 



} 

답변

1

팬텀 클래스는 Soot의 클래스 경로에 존재하지 않는 클래스의 암시 적으로 생성 된 모델입니다. 이 문제를 없애려면 참조하는 클래스가 Soot의 클래스 경로에 있는지 확인하십시오.