【发布时间】:2016-06-03 21:50:34
【问题描述】:
我有一个 java 服务器,它通过命令行编译 android APK 并将输出写入文件,这是源代码:
Process p = Runtime.getRuntime().exec("gradlew assembleRelease", null , new File(this.workDir));
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = input.readLine()) != null) {
standardOutput.writeln(line);
}
input.close();
它适用于所有 android 项目,但如果 android 项目在 assets 文件夹中有一个目录或包含稀有字符(á、ñ...)的文件,那么,就会卡在line = input.readLine()
我打开 jconsole 看看卡在哪里,我得到了这个:
Name: Thread-3
State: RUNNABLE
Total blocked: 0 Total waited: 6
Stack trace:
java.io.FileInputStream.readBytes(Native Method)
java.io.FileInputStream.read(FileInputStream.java:255)
java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
java.io.BufferedInputStream.read(BufferedInputStream.java:345)
- locked java.io.BufferedInputStream@e70e4f8
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
- locked java.io.InputStreamReader@4426351b
java.io.InputStreamReader.read(InputStreamReader.java:184)
java.io.BufferedReader.fill(BufferedReader.java:161)
java.io.BufferedReader.readLine(BufferedReader.java:324)
- locked java.io.InputStreamReader@4426351b
java.io.BufferedReader.readLine(BufferedReader.java:389)
com.mobinGen.jobs.AndroidJob.releaseCompile(AndroidJob.java:329)
com.mobinGen.jobs.AndroidJob.jobProcess(AndroidJob.java:122)
com.mobinGen.jobs.BaseJob.process(BaseJob.java:138)
com.mobinGen.generationAPI.GeneratorAndroid$AndroidJobsAsker.run(GeneratorAndroid.java:230)
如您所见,它在第 329 行被阻止,即while ((line = input.readLine()) != null)
我该如何处理?这是一个巨大的问题,因为服务器一直在等待而没有编译下一个即将到来的 android 项目。
谢谢
【问题讨论】:
-
有人可以帮忙吗?
标签: android gradle inputstream bufferedreader readline