对于我的父母,我正在编写一个简单的程序,将文件从数码照相机复制到“我的文档”文件夹.他们总是需要我的帮助(他们不是那么技术先进)从相机上取下他们的照片所以我决定帮助他们.我称之为复印机.由于我在
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;
}
}