2016-02-28 41 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线程可以在赋值后访问。 –