Java Printer Service在使用PrinterURI属性时抛出ClassCastException

时间:2011-08-26 07:17:17

标签: java

我已经实施了一个程序,使用IP地址,打印机名称

将文档打印到特定的打印机

代码:

URI myURI=null;
FileInputStream psStream=null;
try   {
       psStream = new FileInputStream( "sample.docx" );
   }
catch ( FileNotFoundException e )   {
    e.printStackTrace();
}
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.GIF;
    Doc myDoc = new SimpleDoc( psStream, psInFormat, null );
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    aset.add( new Copies(5) );
    try {             
        String host="192.255.301.147";
        String printer="HP LaserJet 5000 Series PCL6";
        String theUrl = "ipp://"+host+"/printers/"+printer;
        theUrl = URLEncoder.encode(theUrl, "UTF-8");
        myURI =  new URI(theUrl);       
              aset.add(new PrinterURI(myURI));  
    } catch (URISyntaxException e) {
        System.out.println("URI exception caught: "+e);         
    } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
    }

  PrintService[] services = PrintServiceLookup.lookupPrintServices( psInFormat, aset );
   if ( services.length > 0 ) {
     DocPrintJob job = services[0].createPrintJob();          
     try {
             job.print( myDoc, aset );
     }
     catch ( PrintException e ){
     }
}

在运行程序时,得到 ClasscastException

Exception in thread "Main Thread" java.lang.ClassCastException
    at javax.print.attribute.AttributeSetUtilities.verifyAttributeValue(AttributeSetUtilities.java:534)
    at javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:283)
    at com.src.print.TestPrint2.main(TestPrint2.java:64)

在RequestAttributeSet( aset.add(new PrinterURI(myURI)) 中添加PrinterURI属性,程序运行正常。 它采用默认的打印机配置并打印文档。

你可以帮我解决这个问题。如何使用PrinterURI API?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的错误消息“ClasscastException”。我自己发现这是一个粗心的错误。希望能帮助别人。

job.print( myDoc, aset );

.lookupPrintServices正在使用 PrintServiceAttributeSet

{{1}}

.print正在使用 PrintRequestAttributeSet

它们与AttributeSet

的集合不同

答案 1 :(得分:0)

通过阅读stacktrace和相关的类文档,很可能发生此异常,因为HashPrintRequestAttributeSet(扩展PrintRequestAttributeset)强制所有添加的类型必须符合PrintRequestAttribute

如果您看到PrinterURI的文档,您会发现它没有实现导致异常的接口。阅读您的代码和问题,我猜您可能想要使用Destination而不是PrinterURI。