我正在使用通过USB连接的POS打印机在Windows 7上开发Java程序。我开始使用普通的PrintJob使用打印线轴,但这还不够。我需要控制比驱动程序更多的东西。
所以我用我自己编写的所有命令发送原始数据。我已经实现了这一点,感谢 norbi771 在这里的回答Print Zebra ZM400 using Java。所以我在网络上共享了打印机,我正在创建一个OutputStream来将原始数据发送到\ localhost \ myprinter
这很好用,当我尝试打开InputStream来读取打印机状态时,我的问题出现了。此模型有一些命令可以询问某些状态,打印机可以立即回答。手册说:
只要收到数据序列,就会发送状态。打印机发送由一字节数据表示的当前状态。打印机在不确认主机是否可以接收数据的情况下发送状态。
然后,我能够发送原始数据(我使用相同的模式和URL进行打印),但是当我尝试读取状态时,我正在设置FileNotFoundException。 java.io.FileNotFoundException:\ localhost \ myprinter,(系统找不到指定的文件)。怎么可能找不到输入,但输出是的?
有人知道我怎么能读取打印机发送的信息?到目前为止,这是我的代码。我每隔5秒在一个线程中执行一次,因此不是“未准备好/已连接”的打印机。我甚至在创建InputStream之前尝试睡觉,但没有任何作用。有没有其他方法可以连接阅读它?
FileOutputStream os; FileInputStream is;
PrintStream ps = null; InputStreamReader reader = null;
char[] askStatus = {0x10, 0x04, 0x02};
String port = "\\\\localhost\\myprinter";
try {
os = new FileOutputStream(port);
ps = new PrintStream(os);
ps.print(askStatus);
ps.flush();
//Everything fine until here
//sleep(1000);
is = new FileInputStream(port); //This line throws the Exception
reader = new InputStreamReader(is);
if (reader.ready()) {
int status = reader.read();
System.out.println("Status: " + Integer.toBinaryString(status));
}
} catch (Ex...) {...}