Я разрабатываю программу на Java поверх Windows 7, в которой используется POS-принтер, подключенный через USB. Я начал с обычного PrintJob, используя очередь печати, но этого недостаточно. Мне нужно контролировать больше вещей, чем может водитель.
Поэтому я отправляю необработанные данные со всеми командами, написанными мной. Я достиг этого благодаря ответу norbi771 здесь Печать Zebra ZM400 с использованием 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...) {...}