org.openide.util.Lookup не может найти реализацию каких-либо классов
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(префикс String) (в Main.java). По какой-то причине я не могу заставить это работать.
2 ответа
Я удалил API NetBeans и переключился на "Размышления". Я реализовал Maven и запустил его с IntelliJ. Хорошо работает для меня.
Я не знаком с OpenIDE Lookup
механизм, но я знаком с Java ServiceLoader
механизм.
Вам необходимо предоставить файл в META-INF/services/
папка с описанием того, какие классы реализуют определенные интерфейсы. Из документов Java, описывающих ServiceLoader
класс это пример:
Если
com.example.impl.StandardCodecs
является реализациейcom.example.CodecSet
сервис, то его JAR-файл также содержит файл с именемMETA-INF/ услуги /com.example.CodecSet
Этот файл содержит одну строку:
com.example.impl.StandardCodecs # Стандартные реализации кодеков
com.example.CodecSet
Вам не хватает похожего файла, который должен быть включен в ваш путь к классам или в ваш JAR-файл.
Вы не включаете имена пакетов, поэтому я не могу привести более прямой пример, чтобы помочь решить вашу проблему.