Мы магазин C ++ и Java. Я написал код, который делает в значительной степени то, что вы просите. Он был написан на C ++ для Win32 (и был правильным исправлением ошибок - это одна из наименее хорошо документированных областей Win32 API), и разные принтеры отправляют разные потоки событий, поэтому может быть очень сложно разработать надежную очередь печати обработка).
Если кто-то создал библиотеку JNI для этого (маловероятно), то это не будет кросс-платформенным. Это потребует огромных усилий (разные ОС обрабатывают очереди печати и уведомления совершенно по-разному).
Я бы порекомендовал освежить ваше программирование на Win32 (с C / C ++). Если у вас все работает, если вам абсолютно необходимо, чтобы они взаимодействовали с вашим Java-приложением, вы можете использовать JNI, чтобы обернуть его.
Вот статьи MSDN о мониторинге уведомлений о смене принтера (сначала вам нужно вызвать OpenPrinter, но следующий вызов - FindFirstPrinterChangeNotification): http://msdn.microsoft.com/en-us/library/dd162722(VS.85).aspx
Если вы также пытаетесь поддерживать * nix и mac, вам придется копать их отдельно. Удачи.