2016-02-28 71 views
0

我使用Process來運行本機二進制文件。這不是問題,我可以像正常一樣獲取InputStream,並通過掃描器進行解析。如果我做while (scanner.hasNextLine())和裏面System.out.println(scanner.nextLine()),一切都很好。如果我在runOnUiThread()內部運行System.out.println(scanner.nextLine()),那麼它混合了我的輸出,我沒有得到所有東西,但是我得到的是同一行的20倍(每次運行不是相同的數字)。Android:runOnUiThread混合輸出

在這裏,我的完整代碼:

processScanner = new Scanner(process.getInputStream()); 
while(processScanner.hasNextLine()) { 
    line = processScanner.nextLine(); 
    System.out.println(line); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      cuberiteSTDOUT.writeString(line); 
     } 
    }); 
} 

產生正常輸出。


processScanner = new Scanner(process.getInputStream()); 
while(processScanner.hasNextLine()) { 
    line = processScanner.nextLine(); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      System.out.println(line); 
      cuberiteSTDOUT.writeString(line); 
     } 
    }); 
} 

創建像

02-28 12:44:18.433 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.435 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.441 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.442 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.443 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.447 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.449 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.450 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.450 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.451 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.452 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.453 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.454 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 
02-28 12:44:18.456 30908-30908/org.cuberite.android I/System.out: Log: [3d7cb4f2|11:44:18] Created arrow 182 with speed {0.00, 0.00, 0.00} and rot {0.00, 0.00} 

瘋狂輸出(這只是一些線條重複,但是其他人離開了)

由於提前

回答

2

特殊照顧線的另一操縱線程比打印。 更改行:

final String line = processScanner.nextLine(); 
+0

謝謝,解決了它....任何進一步的解釋? (我只能在5分鐘內接受-.-) – Schwertspize

+1

首先,2個線程引用了行變量。現在這個變量是臨時的,只有ui線程可以在賦值後訪問。 –