我正在通过 Windows 7 开发一个 Java 程序,它使用通过 USB 连接的 POS 打印机。我从使用打印假脱机的普通 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...) {...}