Java ExceptionInInitializerError-未编译类

Java ExceptionInInitializerError-未编译类,java,netbeans,netbeans-8,Java,Netbeans,Netbeans 8,下面是我运行服务器时从netbeans IDE得到的错误。正如错误所说 不可编译的源代码-Projects.ApplicationMenu不是抽象的 并且不会覆盖中的抽象方法setProject(Projects.Project) Projects.AbstractComponent 但是没有错误。我检查了菜单超类,它确实覆盖了抽象方法 Exception in thread "main" java.lang.ExceptionInInitializerError at Projects.Pro

下面是我运行服务器时从netbeans IDE得到的错误。正如错误所说

不可编译的源代码-Projects.ApplicationMenu不是抽象的 并且不会覆盖中的抽象方法setProject(Projects.Project) Projects.AbstractComponent

但是没有错误。我检查了菜单超类,它确实覆盖了抽象方法

Exception in thread "main" java.lang.ExceptionInInitializerError
at Projects.Project.initialize(Project.java:54)
at Projects.Project.<init>(Project.java:34)
at Server.FileIO.ProjectIO.ProjectIO.translate(ProjectIO.java:52)
at Server.FileIO.ProjectService.LoadProjects(ProjectService.java:55)
at Server.FileIO.ProjectService.<init>(ProjectService.java:42)
at Server.FileIO.FileService.<init>(FileService.java:35)
at Server.ServerInitialization.InitializeModelAndProjects(ServerInitialization.java:47)
at Server.Server.Initialize(Server.java:97)
at Server.Server.<init>(Server.java:46)
at Server.Server.main(Server.java:39)
Caused by: java.lang.RuntimeException: Uncompilable source code - Projects.ApplicationMenu is not abstract and does not override abstract method setProject(Projects.Project) in Projects.AbstractComponent
at Projects.UIComponent.<clinit>(UIComponent.java:15)
... 10 more
下面是ApplicationMenu的菜单超类:

package Projects;

import Key.Key;
import java.util.HashMap;

/**
 *
 * @author Mark
 */
public abstract class Menu extends UIComponent{
    Menu parentMenu;
    HashMap<Key, Menu> childmenus;

    public Menu(String name, Menu parentMenu, Key key, Project project) {
        super(name, parentMenu, key);
        this.parentMenu = parentMenu;
        childmenus = new HashMap<>();//
        this.project = project;
    }
    public Menu addChildMenu(Menu menu){
        childmenus.put(menu.key, menu);
        return menu;
    }
    public String getName(){
        return this.name;
    }
    @Override
    protected void setProject(Project project){
        this.project = project;
    }
    @Override
    public Project getProject(){
        return this.project;
    }
    public final static String childMenus(){return "ChildMenus";}
    public final static String menuType(){return "MenuType";}
}
成套项目;
导入Key.Key;
导入java.util.HashMap;
/**
*
*@作者标记
*/
公共抽象类菜单扩展UIComponent{
菜单父菜单;
HashMap子菜单;
公共菜单(字符串名称、菜单父菜单、键、项目){
超级(名称、父菜单、键);
this.parentMenu=parentMenu;
childmenus=newhashmap()//
this.project=项目;
}
公共菜单添加子菜单(菜单菜单菜单){
childmenus.put(menu.key,menu);
返回菜单;
}
公共字符串getName(){
返回此.name;
}
@凌驾
受保护的项目(项目){
this.project=项目;
}
@凌驾
公共项目getProject(){
归还本项目;
}
公共最终静态字符串childMenus(){返回“childMenus”;}
公共最终静态字符串menuType(){返回“menuType”;}
}
正如你所看到的,我确实重写了那个方法。我已经多次尝试重新启动IDE。我也尝试过清洁和建设我所有的依赖项目数次。我做的一件事是在项目之间移动一个包。我意识到由于某些依赖关系,我无法将此包移动到公共项目。在我把它移回去后,我开始出现这个错误。任何协助都将不胜感激

下面是AbstractComponent类:

package Projects;

import Key.Key;
import java.util.HashMap;
import javax.json.JsonArray;
import javax.json.JsonObject;

/**
 *
 * @author Mark
 */
public abstract class AbstractComponent implements Component {
    String name;
    Key key;
    AbstractComponent parentComponent;
    HashMap<Key, AbstractComponent> childComponents;
    JsonObject packagedJsonObject;
    JsonArray packagedJsonArray;
    Project project;

    public AbstractComponent( String name, AbstractComponent parentComponent, Key key){
        this.name = name;
        this.parentComponent = parentComponent;
        this.key = key;
        childComponents = new HashMap<>();
    }
    public AbstractComponent addChild(AbstractComponent projectelement){
        childComponents.put(projectelement.key, projectelement);
        return projectelement;
    }
    @Override
    public Key getKey(){
        return this.key;
    }
    public JsonObject packKey(){
        return this.key.toJsonObject();
    }
    abstract JsonObject packComponent();
    abstract void unPackComponent();
    abstract void translateFromHeFile();
    abstract protected void setProject(Project project);
    public final static String name(){return "Name";}
}
成套项目;
导入Key.Key;
导入java.util.HashMap;
导入javax.json.JsonArray;
导入javax.json.JsonObject;
/**
*
*@作者标记
*/
公共抽象类AbstractComponent实现组件{
字符串名;
钥匙;
抽象组件父组件;
HashMap组件;
JsonObject packagedJsonObject;
JsonArray软件包;
项目;
公共抽象组件(字符串名称、抽象组件父组件、键){
this.name=名称;
this.parentComponent=parentComponent;
this.key=key;
childComponents=newHashMap();
}
公共抽象组件addChild(抽象组件projectelement){
childComponents.put(projectelement.key,projectelement);
返回项目元素;
}
@凌驾
公钥getKey(){
返回此.key;
}
公共JsonObject packKey(){
返回这个.key.toJsonObject();
}
抽象JsonObject packComponent();
抽象组件();
抽象void translateFromHeFile();
项目摘要(项目);
公共最终静态字符串名称(){return“name”;}
}

我猜setProject方法起源于另一个包中声明的接口或父类,可能是组件接口。如果是这样,那么您的抽象类将可以很好地编译,但是一旦您尝试重写在不同包中声明的受保护方法,具体类将失败


如果是这样,解决方案是将setProject公开。

setProject
应该是公开的而不是受保护的,否?很抱歉,它应该受保护。我没有发布抽象类。我刚刚编辑了我的问题,把这个类也包括进去。但是如果你把它公之于众呢?然后错误发生了什么?我不得不换了15门课。然而,这起了作用。当我更改它时,我不再得到错误。有什么原因吗?另一方面,我没有任何错误。如果你能解释为什么,请把这个作为答案,我会接受的。再次感谢!我打赌该组件在另一个包中找到,并且您不能从另一个包访问受保护的方法或方法签名。您只有在尝试创建具体类时才能发现,因为抽象类可以正常工作。
package Projects;

import Key.Key;
import java.util.HashMap;
import javax.json.JsonArray;
import javax.json.JsonObject;

/**
 *
 * @author Mark
 */
public abstract class AbstractComponent implements Component {
    String name;
    Key key;
    AbstractComponent parentComponent;
    HashMap<Key, AbstractComponent> childComponents;
    JsonObject packagedJsonObject;
    JsonArray packagedJsonArray;
    Project project;

    public AbstractComponent( String name, AbstractComponent parentComponent, Key key){
        this.name = name;
        this.parentComponent = parentComponent;
        this.key = key;
        childComponents = new HashMap<>();
    }
    public AbstractComponent addChild(AbstractComponent projectelement){
        childComponents.put(projectelement.key, projectelement);
        return projectelement;
    }
    @Override
    public Key getKey(){
        return this.key;
    }
    public JsonObject packKey(){
        return this.key.toJsonObject();
    }
    abstract JsonObject packComponent();
    abstract void unPackComponent();
    abstract void translateFromHeFile();
    abstract protected void setProject(Project project);
    public final static String name(){return "Name";}
}