gpt4 book ai didi

java - Java读取USB打印机状态

转载 作者:行者123 更新时间:2023-12-01 04:21:04 25 4
gpt4 key购买 nike

我正在 Windows 7 上使用 Java 开发一个程序,该程序使用通过 USB 连接的 POS 打印机。我从使用打印假脱机的常见 PrintJob 开始,但这还不够。我需要控制比驾驶员能够控制的更多的东西。

所以我发送原始数据以及我自己编写的所有命令。感谢 norbi771 的回答 Print Zebra ZM400 using Java 我已经实现了这一点。因此,我在网络上共享打印机,并创建一个 OutputStream 将原始数据发送到\localhost\myprinter

这很好用,当我尝试打开输入流来读取打印机状态时,我的问题就出现了。该型号有一些命令来询问某些状态,打印机会立即回答。手册说:

每当接收到数据序列时就会传输状态。打印机传输由一字节数据表示的当前状态。打印机传输状态而不确认主机是否可以接收数据。

然后,我可以发送原始数据(我使用相同的架构和 url 进行打印),但是当我尝试读取状态时,我收到 FileNotFoundException。java.io.FileNotFoundException:\localhost\myprinter,(系统找不到指定的文件)。怎么可能在输入时找不到它,但在输出时却找到它?

有人知道如何读取打印机发送的信息吗?到目前为止,这是我的代码。我每 5 秒在一个线程中执行一次,因此不是“未准备好/已连接”的打印机。我什至尝试在创建 InputStream 之前 sleep ,但没有任何效果。还有其他方式可以连接阅读吗?

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...) {...}

最佳答案

您可能需要使用 USB 访问打印机,为此您需要类似 JUSB 的内容。我知道 Windows 实现有一些使用 libusb 带来的限制。

如果幸运的话,您将能够使用它来请求状态。如果没有,您将必须使用 USB 类打印机的 GET_PORT_STATUS 请求来获取状态,如 this page 中所述。 .

我还没有找到完整的工作示例。

关于java - Java读取USB打印机状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18891800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com