Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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.awt.print.Paper与Brother QL标签打印机一起使用_Java_Image_Printing_Label_Java Print - Fatal编程技术网

将自定义java.awt.print.Paper与Brother QL标签打印机一起使用

将自定义java.awt.print.Paper与Brother QL标签打印机一起使用,java,image,printing,label,java-print,Java,Image,Printing,Label,Java Print,我的兄弟QL-720NW标签打印机和java有问题。正如我通过计算得出的,使用java.awt.print.Paper不起作用。提供的解决方案不完整,我对java打印相对较新 代码解决方案中缺少一个部分 可打印的p=…;//创建可打印的对象 现在,我尝试创建一个可打印对象,我的代码如下所示: public static void main(String[] args) throws FileNotFoundException{ // Lookup printer by

我的兄弟QL-720NW标签打印机和java有问题。正如我通过计算得出的,使用java.awt.print.Paper不起作用。提供的解决方案不完整,我对java打印相对较新

代码解决方案中缺少一个部分

可打印的p=…;//创建可打印的对象

现在,我尝试创建一个可打印对象,我的代码如下所示:

    public static void main(String[] args) throws FileNotFoundException{

        // Lookup printer by name 
PrintService[] foundPrinters = PrintServiceLookup.lookupPrintServices(null, new HashAttributeSet(new PrinterName("Brother QL-720NW", null)));
PrintService printer = foundPrinters[0];

// Lookup custom paper by name
MediaSizeName paper = null;
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null))
{
    if (m instanceof MediaSizeName)
    {
        MediaSizeName media = ((MediaSizeName)m);
        if ("Barcode".equals(media.toString())) paper = media;
    }
}

// Create a new printable object
InputStream input = new FileInputStream("C:/Temp/Barcodes/test.png");
Doc doc = new SimpleDoc(input, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

// Set custom paper as request attribute
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(paper);

// Create a new print job and print it
DocPrintJob job = printer.createPrintJob();
try
{
    job.print(doc, attrs);
}
catch (PrintException ex)
{
    ex.printStackTrace();
}

    }
当我尝试运行代码时,我得到了错误:

线程“main”java.lang.IllegalArgumentException中出现异常:数据不是声明的类型

这似乎与这一行有关:

Doc Doc=new SimpleDoc(输入,DocFlavor.SERVICE\u FORMATTED.PRINTABLE,null)

我终于找到了。在尝试使用
DocFlavor.INPUT\u STREAM.AUTOSENSE
更改
DocFlavor.SERVICE\u FORMATTED.PRINTABLE
后,我出现以下错误:

Exception in thread "main" java.lang.NullPointerException
    at java.desktop/javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:275)
    at StringSearch.main(StringSearch.java:7)
线程“main”java.lang.NullPointerException中出现异常

这似乎与
attrs.add(纸张)有关

我已经想不出下一步该怎么办了,我对这件事的了解也有限

你能帮帮我吗?:)

编辑

我用Arvind Kumar Avinash的建议更新了我的代码,但仍然得到一个NullPointerException错误。 我的代码现在看起来像这样:

    public static void main(String[] args) throws FileNotFoundException{

    // Lookup printer by name 
    PrintService[] foundPrinters = PrintServiceLookup.lookupPrintServices(null, new HashAttributeSet(new PrinterName("Brother QL-720NW", null)));
    PrintService printer = foundPrinters[0];

    // Lookup custom paper by namezusammenhang
    MediaSizeName paper = null;
    if(printer != null) {
        for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
            if (m instanceof MediaSizeName) {
                MediaSizeName media = ((MediaSizeName)m);
                if ( media!=null && "Barcode".equals(media.toString())) 
                    paper = media;
            }
        }
    }

    // Create a new printable object
    InputStream input = new FileInputStream("C:/Temp/Barcodes/test.png");
    Doc doc = new SimpleDoc(input, DocFlavor.INPUT_STREAM.PNG, null);

    // Set custom paper as request attribute
    PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
    attrs.add(paper);

    // Create a new print job and print it
    DocPrintJob job = null;

    if (printer != null){
        job = printer.createPrintJob();
        try{
            if(job != null){
                job.print(doc, attrs);
            }

        }catch (PrintException ex){
            ex.printStackTrace();
        }
    }

}
错误/控制台输出如下所示:

    public static void main(String[] args) throws FileNotFoundException{

        // Lookup printer by name 
PrintService[] foundPrinters = PrintServiceLookup.lookupPrintServices(null, new HashAttributeSet(new PrinterName("Brother QL-720NW", null)));
PrintService printer = foundPrinters[0];

// Lookup custom paper by name
MediaSizeName paper = null;
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null))
{
    if (m instanceof MediaSizeName)
    {
        MediaSizeName media = ((MediaSizeName)m);
        if ("Barcode".equals(media.toString())) paper = media;
    }
}

// Create a new printable object
InputStream input = new FileInputStream("C:/Temp/Barcodes/test.png");
Doc doc = new SimpleDoc(input, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

// Set custom paper as request attribute
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(paper);

// Create a new print job and print it
DocPrintJob job = printer.createPrintJob();
try
{
    job.print(doc, attrs);
}
catch (PrintException ex)
{
    ex.printStackTrace();
}

    }
线程“main”java.lang.NullPointerException中出现异常 在java.desktop/javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:275)中
在easypackaging.TEST.main(TEST.java:45)

中,可能存在来自以下代码的
NullPointerException

DocPrintJob job = printer.createPrintJob();
try {
    job.print(doc, attrs);
}
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
    if (m instanceof MediaSizeName) {
        MediaSizeName media = ((MediaSizeName)m);
        if ("Barcode".equals(media.toString())) paper = media;
    }
}
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

public class StringSearch {
    public static void main(String[] args) {
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        attrs.add(null);
    }
}
因为
printer.createPrintJob()
如果
printer
null
,则可能引发
NullPointerException
。类似地,如果
job
null
,您将得到
NullPointerException
。因此,你应该这样写:

DocPrintJob job = null;

if (printer != null) {
    job = printer.createPrintJob();
    try {
        if (job != null) {
            job.print(doc, attrs);
        }
    }
}
if(printer != null) {
    for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
        if (m instanceof MediaSizeName) {
            MediaSizeName media = ((MediaSizeName)m);
            if ( media!=null && "Barcode".equals(media.toString())) 
                paper = media;
        }
    }
}
存在这种可能性的另一个地方在以下代码中:

DocPrintJob job = printer.createPrintJob();
try {
    job.print(doc, attrs);
}
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
    if (m instanceof MediaSizeName) {
        MediaSizeName media = ((MediaSizeName)m);
        if ("Barcode".equals(media.toString())) paper = media;
    }
}
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

public class StringSearch {
    public static void main(String[] args) {
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        attrs.add(null);
    }
}
您应该按照以下方式重写它:

DocPrintJob job = null;

if (printer != null) {
    job = printer.createPrintJob();
    try {
        if (job != null) {
            job.print(doc, attrs);
        }
    }
}
if(printer != null) {
    for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
        if (m instanceof MediaSizeName) {
            MediaSizeName media = ((MediaSizeName)m);
            if ( media!=null && "Barcode".equals(media.toString())) 
                paper = media;
        }
    }
}
如果仍然出现错误,请共享完整堆栈跟踪

我建议你再检查一遍你的程序


更新:以下更新基于更新的问题


我能够用以下代码复制该问题:

DocPrintJob job = printer.createPrintJob();
try {
    job.print(doc, attrs);
}
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
    if (m instanceof MediaSizeName) {
        MediaSizeName media = ((MediaSizeName)m);
        if ("Barcode".equals(media.toString())) paper = media;
    }
}
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

public class StringSearch {
    public static void main(String[] args) {
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        attrs.add(null);
    }
}
执行时,将显示以下错误:

Exception in thread "main" java.lang.NullPointerException
    at java.desktop/javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:275)
    at StringSearch.main(StringSearch.java:7)
因此,您获得
NullPointerException
的原因是
paper
在语句
attrs.add(paper)中为
null

我希望,这会有帮助

仅用于确认,例如,以下代码不会显示任何错误:

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;

public class StringSearch {
    public static void main(String[] args) {
        PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
        attrs.add(Sides.TWO_SIDED_SHORT_EDGE);
    }
}

嗨,阿文德,非常感谢你的回复!遗憾的是,我仍然得到了错误。我用新代码和控制台输出更新了原始答案。:)谢谢你,阿文!事实上,纸张似乎是空的。系统输出打印(纸张);在内部if(media!=null&“Barcode”.equals(media.toString())为我打印了一堆null。现在的问题是,为什么纸张是空的。不过,谢谢你!