【问题标题】:Reading usb printer status in Java在 Java 中读取 USB 打印机状态
【发布时间】:2013-09-19 10:05:37
【问题描述】:

我正在通过 Windows 7 开发一个 Java 程序,它使用通过 USB 连接的 POS 打印机。我从使用打印假脱机的普通 PrintJob 开始,但这还不够。我需要控制的东西超出了司机的能力范围。

所以我用我自己编写的所有命令发送原始数据。感谢 norbi771Print 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...) {...}

【问题讨论】:

    标签: java windows printing usb raw-data


    【解决方案1】:

    您可能需要使用 USB 访问打印机,您需要类似 JUSB 的东西。我知道 Windows 实现有一些使用 libusb 的限制。

    如果幸运的话,您可以使用它来请求状态。如果不是,您将不得不使用 USB 类打印机的 GET_PORT_STATUS 请求来获得this page 中解释的状态。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多