Tôi có đoạn mã sau:Tại sao ngắt lời tuyên bố này không hoạt động?
public void post(String message) {
final String mess = message;
(new Thread() {
public void run() {
while (true) {
try {
if (status.equals("serviceResolved")) {
output.println(mess);
Game.log.fine("The following message was successfully sent: " + mess);
break;
} else {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
} catch (NullPointerException e) {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
}
}
}).start();
}
Trong log file của tôi, tôi tìm thấy rất nhiều dòng như thế này:
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
Và chương trình của tôi không được đáp ứng.
Dường như với tôi rằng lệnh break
không hoạt động. Điều gì có thể là một lý do có thể cho điều đó.
Điều thú vị là nó không phải lúc nào cũng xảy ra. Đôi khi chương trình của tôi hoạt động tốt, đôi khi vấn đề được mô tả ở trên xảy ra.
FWIW: bạn có thể đưa ra hai dòng Thread.sleep() vào một dòng được thực hiện sau lần thử/bắt ngoài cùng. –
Việc bắt giữ 'NullPointerException' dường như không phải là một ý tưởng hay (có nghĩa là phải kiểm tra xem liệu' status == null' - nếu như vậy hãy kiểm tra liệu 'status' là' null' thay thế).Và 'InterruptedException' nên được thực hiện để thoát ra khỏi vòng lặp (không phải là tôi thích thread ngắt, nhưng nó là có và do đó nên được xử lý)./Ngoài ra bạn có thể tạo tham số 'final', vì vậy bạn không cần copy' mess'. –
Đây là lý do rõ ràng lý do tại sao bạn không bao giờ nên im lặng một ngoại lệ trừ khi bạn thực sự cần phải làm điều đó: gỡ lỗi trở thành địa ngục. – Jack