2012-05-10 3 views
0

Я хочу написать хвост, как приложение. Теперь это приложение, сканирует файл для изменения фона и запускает события в случае, если что-то изменилось.длинное приложение (хвост как)

Я хочу запустить приложение до тех пор, пока пользователь не попросит его выйти, нажав ctrl + c (работает по умолчанию). Я не хочу, чтобы создать много нагрузки на процессор просто делать бесконечный цикл while(true) как я делаю ATM:

try { 
     // thread doing the monitoring 
     thread.start(); 

     // forcing the programm not to exit 
     while (System.in.available() == 0) { 
      Thread.sleep(5000); 
     } 

    } catch (final IOException e) { 
     e.printStackTrace(); 
    } 

Кто-нибудь знает более элегантное/правильный подход к этому?

ответ

2

Я не уверен, почему вы используете нить в первую очередь, сценарий unix «tail» - это просто цикл while(true) без условия выхода. Он отслеживает изменения файла и печатает, если они обнаружены. Я думаю, что по умолчанию он останавливается на 1 секунду, поэтому в основном:

while(true) { 
    // Code goes here. Watch file, System.out.print if it changes 

    Thread.sleep(1000); 
} 

Нет необходимости в потоке. Но чтобы ответить на вопрос о наилучшем способе сохранения вашего приложения: просто не возвращайтесь из метода потока run(). Вам не обязательно присоединяться к потоку, приложение останется на переднем плане, если у него есть один поток, не содержащий daemon.

+0

Я подумал, что некоторое время (правда) вызовет много необузданной нагрузки на мой процессор. –

+1

Вот для чего нужен сон. – TaZ

+0

Я попробую. Я всегда понимаю, что есть «лучший» способ: D –

0

Если вы хотите прочитать System.in без оживленного ожидания, это очень легко достичь. InputStream имеет блокирование семантика, так что все, что вам нужно, это вызвать один из методов read, и он будет блокироваться до тех пор, пока не будет доступный вход. Если вы сканируете ввод текста, я бы посоветовал BufferedReader.readLine. Кроме того, сделайте это в главном потоке, не ставьте смысла в начале другого.

+0

Я отредактировал мой вопрос, может быть, теперь это более ясно. Почему кто-то из вас опустил мой пост? –

+0

Что вы подразумеваете под «кем-то из вас?» Вы берете меня лично за хранителя всего этого? –

+0

Извините, это был ты, потому что ты сказал, что неясно, чего я хочу. Я сожалею об этом вменении! –

Смежные вопросы