PrintServiceLookup.lookupDefaultPrintService () возвращает ноль - PullRequest
4 голосов
/ 19 июня 2009

PrintServiceLookup.lookupDefaultPrintService() возвращает NULL, поскольку у меня установлен принтер и установлен принтер по умолчанию.

Если я использую это в простой программе, она работает нормально, но когда я пытаюсь использовать ее в моей программе, основанной на апплетах, она возвращает NULL.

Пожалуйста, пришлите мне хорошее решение этой проблемы.

Ответы [ 4 ]

2 голосов
/ 10 декабря 2010

Чтобы получить доступ к принтеру (или к любому другому ресурсу на главном компьютере) файл jar, в котором находится код апплета, должен быть подписан, и пользователь должен принять подписавшего как доверенную сторону. Чтобы подписать файл jar, используйте программу jarsigner, которая является частью JDK. Jarsigner использует свое собственное хранилище ключей, поэтому, если у вас есть собственный сертификат, вы должны сначала импортировать сертификат в хранилище ключей. Он также может генерировать сертификаты, если у вас нет другого сертификата для подписи файла JAR.

Документацию по инструменту jarsigner можно найти здесь.

Обратите внимание, что новые среды выполнения Java спрашивают пользователя, разрешает ли он (-ы) разрешить коду доступ к принтеру, но я обнаружил, что независимо от ответа код в неподписанном jar-файле не имеет доступа к ресурсам.

1 голос
/ 15 мая 2014

Этот код работает в подписанном апплете в Windows с 1.7.0_55:

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;

...

HashDocAttributeSet docAttr=new HashDocAttributeSet();
HashPrintRequestAttributeSet reqAttr=new HashPrintRequestAttributeSet();

try {
    PrintService pserv = PrintServiceLookup.lookupDefaultPrintService();
    if (pserv == null) {
        System.out.println("ERROR-01: no default print service");
    }
    System.out.println("Printer: " + pserv.getName());

    DocPrintJob job = pserv.createPrintJob();
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    String content = makeZplLabel();
    Doc doc = new SimpleDoc(content.getBytes(), flavor, docAttr);

    job.print(doc, reqAttr);

} catch (Exception e) {
    System.out.println("ERROR-02:" + e.getMessage());
}
0 голосов
/ 28 мая 2016

Убедитесь, что printer.conf определяет <DefaultPrinter name> вместо <Printer name>. JVM, похоже, находит только принтер по умолчанию, который определен следующим образом.

Этот фрагмент кода может помочь быстро проверить, работает ли он:

import javax.print.PrintServiceLookup;

public class checkDefaultPrinter {
    public static void main(String[] args) {
        System.out.println(PrintServiceLookup.lookupDefaultPrintService());
    }
}
0 голосов
/ 19 июня 2009

Вы должны сначала изменить настройки безопасности для Java-апплетов. По умолчанию Java-апплеты не могут печатать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...