--- old/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java 2018-11-26 11:32:13.043627700 +0530 +++ new/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java 2018-11-26 11:32:10.463627800 +0530 @@ -403,13 +403,19 @@ list. */ class RemotePrinterChangeListener implements Runnable { - private String[] prevRemotePrinters; + private String[] prevRemotePrinters = null; RemotePrinterChangeListener() { prevRemotePrinters = getRemotePrintersNames(); } boolean doCompare(String[] str1, String[] str2) { + if (str1 == null && str2 == null) { + return false; + } else if ((str1 == null && str2 != null) || (str2 == null && str1 != null)) { + return true; + } + if (str1.length != str2.length) { return true; } else { @@ -428,15 +434,19 @@ @Override public void run() { while (true) { - String[] currentRemotePrinters = getRemotePrintersNames(); - if (doCompare(prevRemotePrinters, currentRemotePrinters)) { + if (prevRemotePrinters != null) { + String[] currentRemotePrinters = getRemotePrintersNames(); + if (doCompare(prevRemotePrinters, currentRemotePrinters)) { + + // updated the printers data + // printers list now contains both local and network printer data + refreshServices(); - // updated the printers data - // printers list now contains both local and network printer data - refreshServices(); - - // store the current data for next comparison - prevRemotePrinters = currentRemotePrinters; + // store the current data for next comparison + prevRemotePrinters = currentRemotePrinters; + } + } else { + prevRemotePrinters = getRemotePrintersNames(); } try {