0

次のような状況があります。複数のタブを持つ GUI。すべてのタブには、ホーム ディレクトリの特定のディレクトリにあるファイルの内容が表示されます。これらのディレクトリには、GUI の作成時点で存在するものもあれば、存在しないものもあります。FTP経由のタブの1つで、ファイルを取得してホームディレクトリに追加します。

注: 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

多くの有用な情報が含まれており、WatchService. ファイル システム ウォッチ サービスの場合は、FileSystem#newWatchServiceメソッドを使用できます。

于 2012-06-11T09:26:10.827 に答える
1

http://jpathwatch.wordpress.com/を試すことができます。これは Java 5 で動作するはずです。

jpatchwatch は、ディレクトリの変更を監視するための Java ライブラリです。ホスト プラットフォームのネイティブ OS 機能を使用してこれを実現し、ポーリングを回避します。

もちろん、独自のポーリングを作成することもできます。Thread.sleep で待機し、ディレクトリを読み取り、結果を前のリストと比較します...ただし、ポーリング間隔が非常に短い場合、I/O が集中的になる可能性があります。これも参照してください: Java 6 の WatchService

于 2012-06-11T13:53:39.243 に答える