将自定义java.awt.print.Paper与Brother QL标签打印机一起使用
我的兄弟QL-720NW标签打印机和java有问题。正如我通过计算得出的,使用java.awt.print.Paper不起作用。提供的解决方案不完整,我对java打印相对较新 代码解决方案中缺少一个部分 可打印的p=…;//创建可打印的对象 现在,我尝试创建一个可打印对象,我的代码如下所示:将自定义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
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。现在的问题是,为什么纸张是空的。不过,谢谢你!