所以我的应用程序有一个主项目,它加载所有实现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的类?即使没有在服务加载器中加载它
答案 0 :(得分:0)