1

USB経由で接続されたPOSプリンターを使用するWindows 7上のJavaでプログラムを開発しています。印刷スプールを使用した一般的な PrintJob から始めましたが、十分ではありません。ドライバーよりも多くのことをコントロールする必要があります。

だから私は自分で書いたすべてのコマンドで生データを送信しています。ここでのnorbi771の回答のおかげで、私はこれを達成しましたPrint Zebra ZM400 using Java . ネットワーク上でプリンターを共有し、生データを \localhost\myprinter に送信する OutputStream を作成しています。

これはうまく機能します。InputStreamを開いてプリンターのステータスを読み取ろうとすると、問題が発生します。このモデルには、ステータスを要求するコマンドがいくつかあり、プリンターはすぐに応答します。マニュアルは次のように述べています。

ステータスは、データ シーケンスを受信するたびに送信されます。プリンターは現在のステータスを 1 バイトのデータで送信します。プリンターは、ホストコンピューターがデータを受信できるかどうかを確認せずにステータスを送信します。

次に、生データを送信できます (同じスキーマと 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...) {...}
4

1 に答える 1