我的情况如下:带有几个标签的GUI。每个选项卡都显示主目录中特定目录中的文件内容。其中一些目录存在于GUI创建点,而其他目录则不存在。在一个通过FTP的选项卡中,我得到一些文件并将其添加到主目录。
注意:我正在使用java 5.
如何让每个标签都知道FTP已将新文件添加到属于此选项卡的目录中?
public class ScannerPanel extends JPanel implements ChangeListener {
private void initGUI() {
setPreferredSize(new Dimension(700, 400));
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("FTP", IconLib.ICON_16X16_DATA,new FtpTabPanel (this),"FTP");
tabbedPane.addTab("PCS", IconLib.ICON_16X16_THUM,new PcsTabPanel (this),"PCS");
tabbedPane.addTab("Car", IconLib.ICON_16X16_PAPE,new CarTabPanel (this),"Car");
tabbedPane.addTab("Pic", IconLib.ICON_16X16_RETI,new PicTabPanel (this),"Pic");
tabbedPane.addChangeListener(this);
add(tabbedPane);
}
public void stateChanged(ChangeEvent e) {
//detect new file has been added to directory
// update the content of tab
}
}
答案 0 :(得分:4)
查看包含大量有用信息的'Watching a directory'教程,并建议使用WatchService
。对于文件系统监视服务,您可以使用FileSystem#newWatchService
方法
答案 1 :(得分:1)
你可以试试http://jpathwatch.wordpress.com/这个应该适用于Java 5.
jpatchwatch是一个用于监视目录以进行更改的Java库。它使用主机平台的本机OS功能来实现此目的,以避免轮询。
当然你可以编写自己的轮询:等待Thread.sleep,读取目录,将结果与之前的列表进行比较......但如果你的轮询间隔非常短,这可能会导致I / O密集。另请参阅:WatchService for Java 6