我已经实施了一个程序,使用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?答案 0 :(得分:1)
我遇到了同样的错误消息“ClasscastException”。我自己发现这是一个粗心的错误。希望能帮助别人。
job.print( myDoc, aset );
.lookupPrintServices正在使用 PrintServiceAttributeSet
{{1}}
.print正在使用 PrintRequestAttributeSet
它们与AttributeSet
的集合不同答案 1 :(得分:0)
通过阅读stacktrace和相关的类文档,很可能发生此异常,因为HashPrintRequestAttributeSet(扩展PrintRequestAttributeset)强制所有添加的类型必须符合PrintRequestAttribute。
如果您看到PrinterURI的文档,您会发现它没有实现导致异常的接口。阅读您的代码和问题,我猜您可能想要使用Destination而不是PrinterURI。