Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
慢速java打印-DocPrintJob_Java_Printing - Fatal编程技术网

慢速java打印-DocPrintJob

慢速java打印-DocPrintJob,java,printing,Java,Printing,我开发了一个Java桌面程序,该程序使用热敏打印机,代码如下: /** * printableObject extends Printable */ public static boolean print(Object printableObject, String printer_name) throws InterruptedException { InputStream printerTest = new ByteArrayInputStream("".getBytes());

我开发了一个Java桌面程序,该程序使用热敏打印机,代码如下:

/**
 * printableObject extends Printable
 */
public static boolean print(Object printableObject, String printer_name) throws InterruptedException {
    InputStream printerTest = new ByteArrayInputStream("".getBytes());
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc myDoc = new SimpleDoc(printableObject, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
    Doc docTest = new SimpleDoc(printerTest, flavor, null);
    HashPrintServiceAttributeSet aset = new HashPrintServiceAttributeSet();
    PrintRequestAttributeSet rset = new HashPrintRequestAttributeSet();
    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
    PrinterName printer = new PrinterName(printer_name, null);
    rset.add(OrientationRequested.PORTRAIT);
    rset.add(MediaSizeName.INVOICE);
    aset.add(printer);
    services = PrintServiceLookup.lookupPrintServices(null, aset);
    if (!priterIsReady(services[0], 5)) {
        return false;
    }

    if (services != null) {
        try {
            DocPrintJob docPrintJobTest = services[0].createPrintJob();
            docPrintJobTest.print(docTest, rset);
            if (!priterIsReady(services[0], 5)) {
                return false;
            }

            DocPrintJob job = services[0].createPrintJob();
            job.print(myDoc, rset);
            Thread.sleep(300);
            if (priterIsReady(services[0], 5)) {
                DocPrintJob job2 = services[0].createPrintJob();
                job2.print(docTest, rset);
                return priterIsReady(services[0], 5);
            } else {
                return false;
            }
        } catch (ArrayIndexOutOfBoundsException ex) {
            ex.printStackTrace();
        } catch (PrintException pe) {
            pe.printStackTrace();
        }
    }
    return false;
}

public static boolean priterIsReady(PrintService printer, int max) throws InterruptedException {
    int count = 0;
    while (count < max) {
        AttributeSet att = printer.getAttributes();
        for (Attribute a : att.toArray()) {
            String attributeName;
            String attributeValue;
            attributeName = a.getName();
            attributeValue = att.get(a.getClass()).toString();
            if (attributeName.equals("queued-job-count")) {
                if (Integer.valueOf(attributeValue) == 0) {
                    return true;
                } else {
                    System.err.println(">>> queued-job-count: " + Integer.valueOf(attributeValue));
                }
            }
        }
        Thread.sleep(600 + 600 / 5 * count);
        count = count + 1;
    }
    return false;
}
/**
*可打印对象扩展了可打印对象
*/
公共静态布尔打印(Object printableObject,String printer_name)引发InterruptedException{
InputStream printerTest=新的ByteArrayInputStream(“.getBytes()”);
DocFlavor=DocFlavor.INPUT\u STREAM.AUTOSENSE;
Doc myDoc=new SimpleDoc(可打印对象,DocFlavor.SERVICE\u FORMATTED.PRINTABLE,null);
Doc docTest=new SimpleDoc(printerTest,flavor,null);
HashPrintServiceAttributeSet aset=新的HashPrintServiceAttributeSet();
PrintRequestAttributeSet rset=新的HashPrintRequestAttributeSet();
PrintService[]services=PrintServiceLookup.lookupPrintServices(null,null);
PrinterName printer=新的PrinterName(打印机名称,空);
rset.add(方向请求的肖像);
rset.add(MediaSizeName.INVOICE);
aset.add(打印机);
服务=PrintServiceLookup.lookupPrintServices(null,aset);
如果(!priterisrady(服务[0],5)){
返回false;
}
if(服务!=null){
试一试{
DocPrintJob docPrintJobTest=服务[0]。createPrintJob();
打印(docTest,rset);
如果(!priterisrady(服务[0],5)){
返回false;
}
DocPrintJob作业=服务[0]。createPrintJob();
作业打印(myDoc,rset);
睡眠(300);
if(优先级(服务[0],5)){
DocPrintJob job2=服务[0]。createPrintJob();
作业2.打印(博士测试、资源测试);
返回优先级日(服务[0],5);
}否则{
返回false;
}
}捕获(阵列索引边界外异常){
例如printStackTrace();
}捕获(打印异常pe){
pe.printStackTrace();
}
}
返回false;
}
公共静态布尔优先级READY(PrintService打印机,int max)引发中断异常{
整数计数=0;
同时(计数<最大值){
AttributeSet att=printer.getAttributes();
for(属性a:att.toArray()){
字符串属性名;
字符串属性值;
attributeName=a.getName();
attributeValue=att.get(a.getClass()).toString();
if(attributeName.equals(“排队作业计数”)){
if(Integer.valueOf(attributeValue)==0){
返回true;
}否则{
System.err.println(“>>>队列作业计数:”+Integer.valueOf(attributeValue));
}
}
}
线程睡眠(600+600/5*计数);
计数=计数+1;
}
返回false;
}
该代码在我的IDE或使用jar(java 1.8.0_73)时都能完美工作。印刷速度很快。但使用另一个配置类似的笔记本电脑(i7、8GB、Windows10)时,我遇到了一个问题:开始打印需要10秒以上。相同的JAR和相同的打印机,但java 1.8.0_101。在此期间,文档处于打印队列中。
我用了另一个笔记本(i5,8GB,Windows10),我也有同样的延迟

我更改了上述代码,并尝试在不检查打印机是否准备就绪或打印测试的情况下打印,但问题仍然存在

有人经历过这个问题吗?
是否有其他方法可以打印可打印对象?

在此期间,文档在打印队列中,因此不是Java问题。检查你的打印机驱动程序,它是我的主要嫌疑犯。但对于Windows 10,它是相同的64位驱动程序。另一个嫌疑犯是Java版本。我会寻找另一种打印方式,我找不到解决方案。但我认为这不会改变任何事情。在这段时间里,文档在打印队列中,这不是Java的问题。检查你的打印机驱动程序,它是我的主要嫌疑犯。但对于Windows 10,它是相同的64位驱动程序。另一个嫌疑犯是Java版本。我会寻找另一种打印方式,我找不到解决方案。但我认为这不会改变任何事情。