Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Таймер и ожидание подключение флешки.


Автор: lugaru 20.2.2012, 00:12
Задача: Есть программка, висит в трэе после запуска. Необходимо что бы выполнялся определенный код этой программы, только если подключена флешка с определенным именем. После подключения выполняется определенный код и программа уходит в режим ожидания, выполняя код просто через определенный промежуток времени. 

Вопросы: 
1.    Как мониторить появления флешки с определенным именем в системе? 
2.    Как создать таймер? 
3.    Как получить список всех виртуальных, логический, и просто подключенных носителей к системе?(Содержимое «Мой Компьютер») 

Буду рад всем идеям и конкретным предложениям)))) 
Заранее благодарен!

Автор: COVD 20.2.2012, 02:56
Код

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

public class NewClass {

    public static void main(String[] a){
        Timer timer = new Timer();
        long delayMillisec = 1000;
        long periodMillisec = 1000;
        timer.schedule(new Task(), delayMillisec,periodMillisec);
        
    }
    
    static class Task extends TimerTask {        
        public void run() {
            File[] files = File.listRoots();
            for (File file : files) {
                System.out.println("file: " + file);
            }
        }
    }
}


Вывод в консоль:
file: A:\
file: C:\
file: D:\
file: E:\
Вывод в консоль после подключения "флешки":
file: A:\
file: C:\
file: D:\
file: E:\
file: F:\

Автор: lugaru 20.2.2012, 13:28
Цитата(COVD @ 20.2.2012,  02:56)
[code=java]
import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

public class NewClass {

    public static void main(String[] a){
        Timer timer = new Timer();
        long delayMillisec = 1000;
.......
    

спасибо, на счет таймера помогли а за РУТлист, аж стыдно как просто))))

Автор: lugaru 20.2.2012, 14:04
Цитата(COVD @ 20.2.2012,  02:56)
Код

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;
....................



а не подскажете хоть где искать, как сделать реакцию на событие, например на появление тойже флешки в системе?

Автор: COVD 20.2.2012, 14:59
Дальше программировать надо. примерно так:
Код

    static class Task extends TimerTask {
        private Set<File> oldSet = new HashSet<File>();
        public void run() {
            Set<File> newSet = new HashSet<File>();
            File[] files = File.listRoots();
            for (File file : files) {
                newSet.add(file);
                if(!oldSet.contains(file)){
                    System.out.println("event: added " + file);
                }
            }
            for(File file : oldSet){
                if(!newSet.contains(file)){
                    System.out.println("event: removed " + file);
                }
            }
            oldSet = newSet;
        }
    }

Автор: lugaru 20.2.2012, 16:26
Цитата(COVD @ 20.2.2012,  14:59)
Дальше программировать надо. примерно так:
Код

    static class Task extends TimerTask {
        private Set<File> oldSet = new HashSet<File>();
.....................

Спасибо, решил вопрос уже немного по другому. 
А в принцепе, использывание таймеров не сильно будет нагружать систему? Если, например, установить его на 5 сек. Суть приложения что бы висело в трее и мониторило событие и поминимуму грузило систему. 

Автор: COVD 20.2.2012, 18:01
Не сильно. 
Вообще это уже предмет последующей оптимизации правильно работающего приложения. 

Автор: lugaru 20.2.2012, 20:18
Все уже решил, все работает. Спасибо =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)