2013-10-27 3 views
1

현재 선택된 프로젝트의 경로를 가져 오려고합니다. 그러나Eclipse 플러그인, ClassCastException

IWorkbench workbench = PlatformUI.getWorkbench(); 
    IWorkbenchWindow window = workbench == null ? null : workbench.getActiveWorkbenchWindow(); 
    IWorkbenchPage activePage = window == null ? null : window.getActivePage(); 

    ISelection selection = activePage.getSelection(); 
    if (selection instanceof TreeSelection) { 
     List list = ((TreeSelection) selection).toList(); 

     for (Object selectedObject : list) { 
      String path = ((Project) selectedObject).getFullPath().makeAbsolute().toString(); 
      System.out.println(path); 
     } 
    } 

내가 그 물건, 나는 다음과 같은 예외가 얻을 실행할 때 : 나는 아래의 코드를 사용하고 내가이 문제를 해결하려면 어떻게

java.lang.ClassCastException: org.eclipse.core.internal.resources.Project cannot be cast to org.eclipse.core.internal.resources.Project 
at junitcategories.handlers.SampleHandler.execute(SampleHandler.java:48) 
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290) 
at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

이것은 클래스 로딩 문제를? - 죄송합니다. 플러그인 개발을 처음 접했습니다.

감사합니다, 타마스

+0

아, 클래스 로더 취급의 즐거움! 두 클래스가 모두 같은 이름을 가지고 있다는 사실에 근거하여 클래스 로더 문제 일 것입니다. 당신이 그것을 해결하는 것을 도울 수 없습니다. –

답변

1

당신이 액세스하려는 것은 당신이 인터페이스 org.eclipse.core.resources.IProject로 캐스팅해야 워크 벤치 프로젝트가 있다고 가정.

패키지 이름에 internal과 함께 사용하면 안됩니다. 이들은 Eclipse API의 일부가 아니며 사전 통지없이 변경 될 수 있습니다.

플러그인 종속성에 org.eclipse.core.resources 플러그인이 있는지 확인하십시오.

+0

답변 해 주셔서 감사합니다. 얇은 점은 이미 IProject를 사용하려고했지만, instanceof 연산자가 실패합니다 ... 이미 기본 클래스 로더로 전환을 시도했습니다. 운이 없다. –

+0

'기본 클래스 로더로 전환'이란 무엇을 의미합니까? 이클립스는 클래스 로더를 관리해야하므로 사용자는 아무 것도하지 않아야한다. 이 플러그인을 Eclipse 플러그인으로 실행하고 있습니까? –

+0

예. eclipse 클래스 로더에 대한 http://wiki.eclipse.org/FAQ_How_do_I_use_the_context_class_loader_in_Eclipse%3F 기사를 읽었지만 문제가 해결되지 않습니다. –