2011-07-10 19 views
7

Mam następujący kodNie można rzucać projektu Eclipse do IJavaProject

IJavaProject targetProject = null; 
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 
    for (IProject project : root.getProjects()) { 
     if (project.getName().equals(projName)) { 
      try { 
       if (project.hasNature("org.eclipse.jdt.core.javanature")) { 
        targetProject = (IJavaProject) project; 
       } 
      } catch(...) { 
      // etc ... 
      } 

Co staram się zrobić to w zasadzie powrót projekt, który pasuje do konkretnej nazwy jako IJavaProject. Jak widać, to sprawdzić, czy dany projekt ma charakter java poprzez wywołanie:

if (project.hasNature("org.eclipse.jdt.core.javanature")) { 

Niestety, dostaję „ClassCaseException” wskazując

java.lang.ClassCastException: 
    org.eclipse.core.internal.resources.Project cannot be cast to org.eclipse.jdt.core.IJavaProject 

Jakiś pomysł dlaczego? Pomyślałbym, że kiedy projekt IProject ma naturę java, może być rzutowany na projekt IJavaProject. Nie mogę uzyskać dostępu do interfejsu JDT Core API w chwili, gdy usługa jest niedostępna here.

Odpowiedz

21

Kod w odpowiedzi nie powinien działać (literówka?). Oto w jaki sposób można utworzyć IJavaProject:

import org.eclipse.jdt.core.JavaCore 
... 
    if (project.hasNature(JavaCore.NATURE_ID)) { 
     targetProject = JavaCore.create(project); 
    } 

IProject jest typem w API Eclipse Resources i IJavaProject jest typem w Eclipse Java Model. Nie są to te same abstrakcje, ale wszystkie projekty IJava mają projekt IP.

+0

Tak, to był typ;) – Joeblackdev

Powiązane problemy