隐藏到SystemTray时Java线程停止

对于我的父母,我正在编写一个简单的程序,将文件从数码照相机复制到“我的文档”文件夹.他们总是需要我的帮助(他们不是那么技术先进)从相机上取下他们的照片所以我决定帮助他们.我称之为复印机.由于我在
Java中找不到合适的USB-Listener,我自己写了一个:

private void sync()
{
    // All devices in an ArrayList
    File[] roots = File.listRoots();
    ArrayList<File> newList = new ArrayList<File>();
    for(File f : roots)
    {
        newList.add(f);
    }

    // Delete unavailable devices
    ArrayList<File> removeThese = new ArrayList<File>();
    for(File f : devices)
    {
        if(!newList.contains(f))
        {
            removeThese.add(f);
        }
    }
    devices.removeAll(removeThese);

    // Add unknown devices
    for(File f : newList)
    {
        if(!devices.contains(f) && f.canRead() && f.canWrite())
        {
            alarm(f); // Called when new device inserted
            devices.add(f);
        }
    }
}

这个方法在一个单独的线程中每1000毫秒被调用一次,我想这样做.承认,这是一个肮脏的方法,但它的工作原理.我经常测试这个功能,我总是得到我想要的结果.当我继续构建我的程序时,我发现当我将程序隐藏到SystemTray时,线程将停止检测新设备.当我再次打开它时,检测线程仍然无法工作.谁能告诉我是什么原因造成的,以及如何解决这个问题?

最佳答案 保存用户插入的数据后,我停止检测新设备.这对我来说很愚蠢,所以我感谢你让我意识到这一点.

public boolean saveSettings() 
{
    File f = new File(fsv.getHomeDirectory() + File.separator + "settings.cms");
    ObjectOutputStream objOut;
    try 
    {
        // Here was my problem. 
        detector.stopDetection();

        if(gui.saveSettings())
        {
            // Settings-file wegschrijven
            objOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
            objOut.writeObject(settings);
            objOut.flush();
            objOut.close();
            return true;
        }
        else
        {
            return false;
        }
    } 
    catch (IOException e) 
    {
        handleExceptions(e);
        return false;
    }
}
点赞