I want to use ZBar Barcode Reader's zbarimg.exe in my java code , when i compile my program , a window pops up and gone in a fraction of seconds

StackOverflow https://stackoverflow.com/questions/20403652

  •  29-08-2022
  •  | 
  •  

Frage

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

}

War es hilfreich?

Lösung

You probably shouldn't be invoking an external process to decode like that, I suspect you're receiving a '\r\n' (aka Carraige Return Line Feed) from your external process. I recommend you use a Java library to perform the decode... here is how you might with ZXing "Zebra Crossing".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top