0

所以我的应用程序有一个主项目,它加载所有实现 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();
   }
}

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

编辑

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

4

1 回答 1

0

这有点尴尬。当我只忘记了 displayPanel.validate();.. 时,我花了两个小时做这个。

于 2014-02-02T02:28:08.440 回答