Мне нужен поток, который подождет, пока файл не будет создан или создан. Пока у меня есть следующий код:
while(!receivedDataFile.isFileExists("receiveddata.txt"))
{
try {
Thead.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
Когда я запускаю его, появляется следующее исключение, и поток завершается:
java.lang.InterruptedException: sleep interrupted
я забыл и отправил его дважды




Вы должны выяснить, какой поток прерывает этот поток. Сами по себе потоки этого не делают.
пожалуйста, можете ли вы сказать мне, как я знаю, какой поток прерывает этот поток?
Поймайте исключение и попробуйте проанализировать объект Exception. В нем должна быть интересная информация.
Я должен согласиться с комментарием Bombes: темы не прерываются сами по себе. Вопреки комментарию Джокиса - они не прерываются, когда происходит замена контекста потока (на самом деле, если поток спит, он отдаст квант любому потоку, у которого есть работа, но я отвлекся).
Кроме того, я бы посоветовал альтернативное средство связи, чем опрос файлов. Вы не можете быть уверены, например, в том, что после того, как вы заметили файл, он был полностью записан без дополнительной работы со стороны автора файла (например, переименования его, когда он был готов, или создания «готового» файла).
Подумайте об использовании чего-то более `` проталкивающего данные '', такого как RMI, HTTP-POST, очереди JMS и т. д.
Один поток прерывается, когда он блокируется (переход в спящий режим), а другой поток вызывает свой метод interrupt. Чтобы это произошло, вызов interrupt должен быть сделан явно.
Кажется, что повторение проверки файла было бы логичным, если поток был прерван, но, не зная причины прерывания, трудно сказать.
Как обычно, когда дело доходит до потоковой передачи, Брайану Гетцу есть что сказать по поводу InterruptedException:
http://www-128.ibm.com/developerworks/java/library/j-jtp05236.html
Если все, что вам нужно, это уведомление о создании файла, И вы можете (и желаете) перейти на собственный (JNI), И вам нужна только поддержка Win32, вы можете использовать код здесь.
да, мне нужно только получать уведомление, когда файл создается. Я вижу прикрепленный код, но не понимаю, что такое фильтр уведомлений? можешь сказать мне пожалуйста
это код C++, который вы должны скомпилировать в dll, а затем получить доступ через JNI (собственный интерфейс java). он не зависит от платформы и имеет другие ограничения, а JNI довольно медленно проходит через интерфейс, но работает отлично.
Что ж, если вы не знаете, что такое InterruptedException, и / или не хотите с этим ничего делать, очевидно, вам следует хотя бы что-то сделать, кроме возврата и выхода из цикла. Достаньте возврат, и дальше будете ждать.
Но я бы выяснил, почему вас прерывают. Что-то пытается отменить вашу цепочку.
зачем задавать один и тот же вопрос дважды?