SQLUtils.java:
import org.openide.util.Lookup;
import java.util.ServiceLoader; // This doesn't work either
public class SQLUtils {
public static DBDriver getDriver(String prefix) {
for(DBDriver e : Lookup.getDefault().lookupAll(DBDriver.class)) {
System.out.println(e.getPrefix());
if(e.getPrefix().equalsIgnoreCase(prefix)) {
return e;
}
}
return null;
}
}MySQLDriver.java:
public class MySQLDriver implements DBDriver {
@Override
public String getPrefix() {
return "mysql";
}
}DBDriver.java:
import java.io.Serializable;
public interface DBDriver extends Serializable {
public String getPrefix();
}Main.java:
public class Main {
public static void main(String[] args) {
DBDriver d = SQLUtils.getDriver("mysql");
}
}这在运行它时什么也不做,它找不到实现的任何类。程序要做的是获取作为SQLUtils.getDriver(字符串前缀)参数输入的驱动程序(在Main.java中)。因为某种原因,我无法让这件事起作用。
发布于 2015-06-20 02:12:36
我放弃了NetBeans API,转而使用Reflections。我实现了Maven并使用IntelliJ运行它。对我来说很管用。
发布于 2015-06-14 07:49:35
我不熟悉OpenIDE Lookup机制,但我熟悉ServiceLoader机制。
您需要在META-INF/services/文件夹中提供一个文件,描述实现特定接口的类。下面是描述Java文档类的ServiceLoader类的示例:
如果
com.example.impl.StandardCodecs是com.example.CodecSet服务的实现,那么它的jar文件也包含一个名为 META-INF/services/com.example.CodecSet 此文件包含以下一行: com.example.impl.StandardCodecs #标准编解码器实现com.example.CodecSet
您所缺少的是一个类似的文件,需要包含在类路径中或JAR文件中。
您不包括包名,所以我不能提供一个更直接的例子来帮助解决您的问题。
https://stackoverflow.com/questions/30826773
复制相似问题