我必須實現一個存儲有關某個學校項目的機場信息的類。該班級應該讀取我們的講師向我們提供的用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,用於存放機場班級中的航班和乘客信息。 addFlight()方法旨在添加一個包含flightNum和目標城市的航班。 addPassengerReservation爲名稱爲「name」的指定flightNum添加一位乘客
是行'工作=新線程(W);'實際上運行?也許你應該記錄下'MalformedURLException',以便知道它發生了。 – 2014-12-11 04:04:59
我回去做了。線程正在運行。或者至少,代碼沒有拋出MalformedURLException。另外,當我通過直接調用w.run()來運行代碼時,它運行正常,並且我現在使用的是同一個url。 – Nick 2014-12-11 04:30:55
只是爲了說明,儘管有'while(1 == 1)',你也可以直接寫'while(true)'來創建一個無限循環。 – gprathour 2014-12-11 04:31:34