2009-06-19 32 views
4

PrintServiceLookup.lookupDefaultPrintService()NULLが返されます。プリンタがインストールされ、デフォルトのプリンタに設定されています。PrintServiceLookup.lookupDefaultPrintService()がnullを返します

私はこれを簡単なプログラムで使用してもうまく動作しますが、アプレットベースのプログラムで使用すると、NULLが返されます。

この問題の解決策を教えてください。

+0

あなたはJNLPを使用して検討していますか? PrinterJobを使用しているときに何も起こらない場合printJob = PrinterJob.getPrinterJob(); – Koekiebox

答えて

0

まず、Javaアプレットのセキュリティ設定を変更する必要があります。デフォルトでは、Javaアプレットは印刷できません。

+0

私は設定を変更し、また印刷可能なインターフェイスを使用して印刷しましたが、今はPrintServiceLookup.lookupDefaultPrintService()を使用する必要があります。これはnullを返します。 –

+0

私は同じ問題を抱えています。 PrintServiceLookup.lookupDefaultPrinterService()はnullを返します。この問題を解決した場合はお知らせください。 –

2

プリンタ(またはその点でホストコンピュータ上の任意のリソース)にアクセスするには、アプレットコードが存在するjarファイルに署名する必要があり、署名者を信頼できる相手として受け入れる必要があります。 jarファイルに署名するには、JDKの一部であるjarsignerプログラムを使用します。 Jarsignerは独自のキーストアを使用するため、独自の証明書を持っている場合は、最初に証明書をキーストアにインポートする必要があります。 jarファイルに署名する他の証明書がない場合は、証明書も生成できます。

Documentation of the jarsigner tool can be found here.

新しいJavaランタイム(s)があれば、ユーザーに尋ねないことに注意してください彼は、コードがプリンタにアクセスできるようになりますが、私は関係なく、答えの、未署名のjarファイル内のコードがアクセスすることが防止されることがわかりましたリソース。

1

このコードは、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

は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()); 
    } 
} 
関連する問題