我想在我的java代码中使用ZBar条形码阅读器的zbarimg.exe,当我编译我的程序时,会弹出一个窗口并在几分之一秒内消失

时间:2013-12-05 15:15:35

标签: java zbar

public static void main(String[] args) {
    String filePath = "C:/Program Files/ZBar/bin/zbarimg -d  C:/Program Files/ZBar/examples/barcode.png";
    try {
        System.out.println("hello");
        Process p = Runtime.getRuntime().exec(filePath);
        //BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        System.out.println("World"); 
        final InputStream stdout = p.getInputStream();
        final OutputStream stdin = p.getOutputStream();
         new Thread(new Runnable() {
            @Override
    public void run() {
        String line;
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
        try {
            while ((line = br.readLine()) != null) {
                System.out.println("[OUT] " + line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
          new Thread(new Runnable() {
    public void run() {
        try {
            byte[] buffer = new byte[1024];

            int bytesRead;
            while ((bytesRead = System.in.read(buffer)) != -1) {
                for(int i = 0; i < buffer.length; i++) {
                    int intValue = new Byte(buffer[i]).intValue();
                    if (intValue == 0) {
                        bytesRead = i;
                        break;
                    }
                }
                // for some reason there are 2 extra bytes on the end
                stdin.write(buffer, 0, bytesRead-2);
                System.out.println("[IN] " + new String(buffer, 0, bytesRead-2) + " [/IN]");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

1 个答案:

答案 0 :(得分:0)

您可能不应该调用外部进程来解码,我怀疑您从外部进程收到了'\ r \ n'(又名Carraige返回换行符)。我建议您使用Java库来执行解码... here is如何使用ZXing“Zebra Crossing”。