1
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();
    }
}

}

4

1 回答 1

0

您可能不应该像这样调用外部进程进行解码,我怀疑您从外部进程接收到 '\r\n' (又名 Carraige Return Line Feed)。我建议您使用 Java 库来执行解码...这是您使用ZXing “斑马线”的方式。

于 2013-12-05T15:23:56.720 回答