Я перенес старый код API принтера в Java 8, и появляется следующее предупреждение:
Ограничение доступа: метод AppContext.getAppContext () 'не является API (ограничение для необходимой библиотеки 'C: \ Program Files \ Java \ jre1.8.0_51 \ lib \ rt.jar')
Это связано с этим кодом (изначально был получен из этого SO вопроса ):
/**
* Printer list does not refresh itself; need to run this to refresh if necessary.
*/
public static void refreshSystemPrinterList() {
Class[] classes = PrintServiceLookup.class.getDeclaredClasses();
for (int i = 0; i < classes.length; i++) {
if ("javax.print.PrintServiceLookup$Services".equals(classes[i].getName())) {
AppContext.getAppContext().remove(classes[i]); // the line that throws the warning
break;
}
}
Насколько я понимаю, PrintServiceLookup
загружает список видимых принтеров при загрузке в класс, но, по-видимому, не обновляет sh этот список или не имеет возможности вызвать обновление sh. Путь для продолжительного приложения, чтобы обновить sh список, состоял бы в том, чтобы либо выгрузить класс, как это делает код, либо перезапустить сам.
Мягкое исследование показывает, что предупреждение пришло Java 9, AppContext.getAppContext()
будет недоступно. Без дальнейших исследований моя текущая идея исправления состоит в том, чтобы использовать доступный загрузчик классов для загрузки этого класса и очистки загрузчика классов при вызове этого метода.
В конечном счете, я хочу знать, что мне нужно сделать, чтобы правильно заменить это , В настоящее время работает на Windows, может перемещаться на Linux; Я вижу много обновлений этого SO вопроса относительно реализации Linux.