【发布时间】:2014-12-11 03:57:12
【问题描述】:
我必须实现一个类来存储有关学校项目的机场信息。该课程应该从我们的讲师提供给我们的以 HTML 编写的网站中读取有关航班和乘客信息的数据,为了做到这一点,我们正在使用线程。我的问题是当我在我的线程上调用start()方法时,它不会调用我实现runnable的类上的run方法,这很奇怪,因为当我第一次测试程序并直接调用run()方法时,它工作得很好。这是我的工作类的 run 方法中的 while 循环,它执行实际的数据处理。
while (1 == 1) {
temp = scan.next();
if ((temp.equals("</body>")))
break;
else {
name = temp;
flightNum = scan.nextInt();
city = scan.next();
indexOfBR = city.indexOf("<");
city = city.substring(0, indexOfBR);
synchronized (airplanes) {
addFlight(flightNum, city);
addPassengerReservation(flightNum, name);
}
}
}
scan.close();
该循环应该读取乘客姓名,然后是航班号,然后是目的地城市,在 html 文件中存储为:
"passenger name" "flight Number" "destination city"<br>
创建和运行线程的方法是
public void readFlightData(String[] urls) {
for (int x = 0; x < urls.length; x++) {
if (!(urls[x].equals(""))) {
try {
Worker w = new Worker(new URL(urls[x]));
Thread work = new Thread(w);
work.start();
}
catch (MalformedURLException e) {
//do nothing
}
}
}
}
当我在工作线程上调用 start 时,此方法不会调用 run 方法,我不知道为什么。任何帮助将不胜感激
我发现问题出在 while 循环中的同步块中。传递给同步块飞机的对象是一个 ArrayList,用于保存 Airport 类中的航班和乘客信息。 addFlight() 方法旨在添加具有 flightNum 和目的地城市的航班。 addPassengerReservation 将一名乘客添加到指定的航班号,名为“name”
【问题讨论】:
-
work = new Thread(w);行真的在运行吗?也许你应该记录那个MalformedURLException,这样你就知道它已经发生了。 -
我回去做了。线程正在运行。或者至少,代码没有抛出 MalformedURLException。此外,当我通过直接调用 w.run() 运行代码时,它起作用了,我现在使用的 URL 与我当时使用的 URL 相同
-
只是告诉你,尽管
while(1 == 1)你也可以直接写while(true)来创建一个无限循环。 -
我刚刚在工作中调用了isAlive,线程实际上还活着。是实际课堂作业中的编码问题吗?我很困惑
-
听起来你需要开始使用你的调试器了。
标签: java