Java 一个可以继续运行的线程?
我正在写一些Android代码, 结构如下:(伪) 然后我新建了一个AThread类的实例并调用start()方法。 我的问题是: 我似乎没有在while循环中不断添加int。 原因是什么?我如何使线程继续运行任务 写在while循环中 因为我正在运行一些实时分析功能 这是我写的一封信:Java 一个可以继续运行的线程?,java,android,Java,Android,我正在写一些Android代码, 结构如下:(伪) 然后我新建了一个AThread类的实例并调用start()方法。 我的问题是: 我似乎没有在while循环中不断添加int。 原因是什么?我如何使线程继续运行任务 写在while循环中 因为我正在运行一些实时分析功能 这是我写的一封信: int i = 0; running = true; while(running) { i++; System.out.println(i);
int i = 0;
running = true;
while(running) {
i++;
System.out.println(i);
if((lines = bufferedReader.readLine()) != null) {
System.out.println("analyzing");
// read two lines per time.
result = filter(lines, bufferedReader.readLine());
if(!result[0].equals("emp")) {
System.out.println("x: " + result[0] + " " + "y: " + result[1]);
System.out.println(MainActivity.analysisKeyPress.classify(Integer.valueOf(result[0]), Integer.valueOf(result[1]), "0"));
System.out.println("insert into db..");
MainActivity.dbhelper.addKeyLog(getCurrentRunningService(), result[0], result[1]);
}
}
}
在有几行可供
BufferedReader
读取之前,int i
似乎不会增加。如果您注释掉这部分:
result = filter(lines, bufferedReader.readLine());
if(!result[0].equals("emp")) {
System.out.println("x: " + result[0] + " " + "y: " + result[1]);
System.out.println(MainActivity.analysisKeyPress.classify(Integer.valueOf(result[0]), Integer.valueOf(result[1]), "0"));
System.out.println("insert into db..");
MainActivity.dbhelper.addKeyLog(getCurrentRunningService(), result[0], result[1]);
}
循环将起作用
很明显,这部分中的某些方法会阻塞代码。尝试运行调试器并逐步执行代码,以查看代码停止执行的位置。这就是循环无法继续的原因。在增加并键入索引后,您有一个
readLine
调用,这是一个等待操作。确保你的BufferedReader
对象得到了它期望得到的行。你在线程上调用了.start()
?是的,我调用了.start()方法,但代码甚至不会编译。这只是一个干净的结构,可以快速了解我的情况,对不起,伙计。但是我添加了完整的块以进一步检查如果在第一次迭代之后有一个wait()
语句,您希望它如何循环?是的,我试过了,现在它可以工作了。输入行来自运行以下命令的进程(Android):(getevent-l/dev/input/event2)。我将尝试调试您提到的块,现在感谢您的大力支持。
result = filter(lines, bufferedReader.readLine());
if(!result[0].equals("emp")) {
System.out.println("x: " + result[0] + " " + "y: " + result[1]);
System.out.println(MainActivity.analysisKeyPress.classify(Integer.valueOf(result[0]), Integer.valueOf(result[1]), "0"));
System.out.println("insert into db..");
MainActivity.dbhelper.addKeyLog(getCurrentRunningService(), result[0], result[1]);
}