java打印代码不工作

java打印代码不工作,java,printing,Java,Printing,我正在使用下面显示的java代码在连接到我的计算机的HP DeskJet1000 USB打印机上打印文本文件。每当我运行此代码时,都会发送打印作业,但打印机不会打印任何内容。状态显示打印机正在打印,但它甚至不接收页面。请帮忙!我的代码如下: package printing; import java.io.FileInputStream; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSe

我正在使用下面显示的java代码在连接到我的计算机的HP DeskJet1000 USB打印机上打印文本文件。每当我运行此代码时,都会发送打印作业,但打印机不会打印任何内容。状态显示打印机正在打印,但它甚至不接收页面。请帮忙!我的代码如下:

package printing;

import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

/** @author Majid */
public class Printing {
    public static void main (String [] args) {
        // TODO code application logic here
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();
        /* locate a print service that can handle it */
        PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
        /* create a print job for the chosen service */
        int printnbr = 0;
        DocPrintJob pj = pservices [printnbr].createPrintJob ();
        try {
            FileInputStream fis = new FileInputStream ("e:/fypdatabase/test.txt");
            Doc doc = new SimpleDoc (fis, flavor, null);
            //PrintJobWatcher pjDone = new PrintJobWatcher (pj);
            /* print the doc as specified */
            pj.print (doc, aset);
        }
        catch (Exception ex) {
            ex.printStackTrace ();
        }  
    }
}

您的代码实际上正在工作。但可能您试图打印到错误的打印机

试试这个:

package printing;

import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

/** @author Majid */
public class Printing {

    public static void main (String [] args) {
        // TODO code application logic here
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();
        /* locate a print service that can handle it */
        PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);

        try {
            int printer = getPrinter(pservices);
            if(printer == -1) {
                throw new Exception("No network printer found");
            }
            DocPrintJob pj = pservices[2].createPrintJob();
            FileInputStream fis = new FileInputStream ("c:/Temp/test.txt");
            Doc doc = new SimpleDoc (fis, flavor, null);
            pj.print (doc, aset);
        }
        catch (Exception ex) {
            ex.printStackTrace ();
        } 
    }

    private int getPrinter(PrintService[] pservices) {
        int printer = -1;
        for(int i = 0; i<pservices.size(); i++) {
            if(pservices[i].getName().contains("\\\\")) {
                System.out.println("network printer: " + pservices[i].toString());   
                printer = i;
                break;
            }        
        }
        return printer;
    }
}
包装印刷;
导入java.io.FileInputStream;
导入javax.print.*;
导入javax.print.attribute.HashPrintRequestAttributeSet;
导入javax.print.attribute.PrintRequestAttributeSet;
/**@作者马吉德*/
公共类印刷{
公共静态void main(字符串[]args){
//此处的TODO代码应用程序逻辑
DocFlavor=DocFlavor.INPUT\u STREAM.AUTOSENSE;
PrintRequestAttributeSet aset=新的HashPrintRequestAttributeSet();
/*找到可以处理它的打印服务*/
PrintService[]pservices=PrintServiceLookup.lookupPrintServices(flavor,aset);
试一试{
int printer=getPrinter(pservices);
如果(打印机==-1){
抛出新异常(“未找到网络打印机”);
}
DocPrintJob pj=pservices[2]。createPrintJob();
FileInputStream fis=新的FileInputStream(“c:/Temp/test.txt”);
Doc Doc=new SimpleDoc(fis,flavor,null);
pj.打印(文件、aset);
}
捕获(例外情况除外){
例如printStackTrace();
} 
}
私有int getPrinter(PrintService[]pservices){
int打印机=-1;

对于(int i=0;i@moskiteau)为什么要在

DocPrintJob pj = pservices[2].createPrintJob();
而不是将打印机的值作为pservices的索引

DocPrintJob pj = pservices[printer].createPrintJob();

(很抱歉,如果这不是澄清这个问题的正确位置,但这是我在这里的第一个问题,我不知道如何以任何其他方式提问)

打印机是否可以从其他应用程序(如Word或记事本)工作?是的,它可以从所有其他应用程序完美打印。您不需要检查返回了多少打印服务,只需要硬编码来使用索引0即可(只是想知道是否安装了一些伪打印机)@Benj,我已经检查了所有内容,正如我所说,我可以在“状态”窗口中看到打印作业,打印机只是没有打印作业。我在Windows Server 2008上也遇到了同样的问题。您找到原因了吗?