JDK-8153732 has provided the mechanism for updating the list of printers returned by PrintServiceLookup.lookupPrintServices(). Yet it does not work in some cases.
Consider the following scenario. When the JVM starts, there are no remote printers. The user adds a remote printer. PrintServiceLookupProvider.RemotePrinterChangeListener triggers a call to PrintServiceLookupProvider.getRemotePrintersNames which correctly sees the new printer. At the same time, it does not update the cached list printers.