0

我的情况如下:带有几个选项卡的 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
    }
}
4

2 回答 2

4

看看'Watching a directory'教程,其中包含很多有用的信息并建议使用WatchService. 对于文件系统监视服务,可以使用FileSystem#newWatchService方法

于 2012-06-11T09:26:10.827 回答
1

您可以尝试http://jpathwatch.wordpress.com/这个应该适用于 Java 5。

jpatchwatch 是一个用于监视目录更改的 Java 库。它使用主机平台的本机操作系统功能来实现这一点,以避免轮询。

或者您当然可以编写自己的轮询:使用 Thread.sleep 等待,读取目录,将结果与之前的列表进行比较……但是如果轮询间隔非常短,这可能会导致 I/O 密集。另请参阅:Java 6 的 WatchService

于 2012-06-11T13:53:39.243 回答