2011-07-10 4 views
7

Je le code suivantne peut pas lancer projet Eclipse pour 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 ... 
      } 

Ce que je suis en train de faire est de revenir essentiellement un projet qui correspond à un nom particulier comme IJavaProject. Comme vous pouvez le voir, je vérifier que le projet en question a un caractère java en appelant:

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

Hélas, je reçois un « ClassCaseException » indiquant

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

Toute idée pourquoi? J'aurais pensé qu'une fois qu'un IProject a une nature java, il peut être casté en IJavaProject. Je ne peux pas accéder à l'API JDT Core pour le moment car le service n'est pas disponible here.

Répondre

21

Le code dans votre réponse ne devrait pas fonctionner (faute de frappe?). Voici comment vous pouvez créer un IJavaProject:

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

IProject est un type dans l'API des ressources Eclipse et IJavaProject est un type dans le modèle Java Eclipse. Ils ne sont pas les mêmes abstractions, mais tous les IJavaProjects ont un IProject.

+0

Oui c'était un type;) – Joeblackdev

Questions connexes