java加载模块中的服务加载器,但可以正确显示加载的视图

时间:2014-02-02 01:49:01

标签: java serviceloader

所以我的应用程序有一个主项目,它加载所有实现IModule的类。每个模块都有一个扩展AbstractView的视图。这是示例代码

public abstract class AbstractView extends JPanel{
    //Init panel
}
public Module implements IModule{
   public AbstractView getView(){
       return some class that extends AbstractView;
   }
   public String getModuleName(){
       return "ModuleName";
   }
}

public Application{
   ServiceLoader<IModules> modules; //Loaded at start of application
   public void displayModule(String moduleName){
       Iterator<IModule> moduleIterator = modules.iterator();
       while (moduleIterator.hasNext()) {
            if (module.getModuleName() == moduleName) {
               display(module.getView());
            }
   }
   public void display(AbstractView view){
      displayPanel.add(view, Borderlayout.Center);
      displayPanel.repaint();
   }
}

它只是简化的例子,但它几乎是如何工作的。我的问题是我无法在视图中显示插件。我不知道为什么那不起作用。当我打印加载的View时,我得到了扩展AbstractView的类,其属性如布局类型等。实现与UI无关的接口的类似乎没有问题atm。我从包含各自jar文件的文件夹中加载插件。

修改

在我的META-INF / services中,我只有app.IModule文件,其中包含文本plugin.Plugin。插件类是实现IModule的类。这是我声明的唯一服务,因为它是服务加载器将加载的类。我是否必须声明扩展AbstractView的类?即使没有在服务加载器中加载它

1 个答案:

答案 0 :(得分:0)

这有点令人尴尬。当我忘记显示Panel.validate(); ....抱歉时,我花了两个小时研究这个