日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 监听窗口是否改变_JAVA项目监听文件是否发生变化

發布時間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 监听窗口是否改变_JAVA项目监听文件是否发生变化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.spring容器都初始化完成之后做操作

packagecom.bijian.study.listener;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.springframework.web.context.support.XmlWebApplicationContext;importcom.bijian.monitor.FileMonitor;public class ContextFileListener implements ApplicationListener{

@AutowiredprivateFileMonitor fileMonitor;

@Overridepublic voidonApplicationEvent(ContextRefreshedEvent event) {if(event.getSource() instanceofXmlWebApplicationContext){if(((XmlWebApplicationContext)event.getSource()).getDisplayName().equals("Root WebApplicationContext")){try{

fileMonitor.monitor();

fileMonitor.start();

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

}

二.applicationContext.xml添加配置

三.添加文件監聽 FileMonitor、FileListener 可看資料commons-io-2.4

packagecom.bijian.study.monitor;importjava.io.File;importorg.apache.commons.io.monitor.FileAlterationListener;importorg.apache.commons.io.monitor.FileAlterationMonitor;importorg.apache.commons.io.monitor.FileAlterationObserver;public classFileMonitor {private FileAlterationMonitor monitor = null;privateString filePath;privateFileAlterationListener alterationListener;private long intervalTime = 10000L;public FileMonitor(long interval) throwsException {

monitor= newFileAlterationMonitor(interval);

}public FileMonitor() throwsException {

monitor= newFileAlterationMonitor(intervalTime);

}public voidmonitor(String path, FileAlterationListener listener) {

FileAlterationObserver observer= new FileAlterationObserver(newFile(path));

monitor.addObserver(observer);

observer.addListener(listener);

}public voidmonitor() {

FileAlterationObserver observer= new FileAlterationObserver(newFile(filePath));

monitor.addObserver(observer);

observer.addListener(alterationListener);

}public void stop() throwsException {

monitor.stop();

}public void start() throwsException {

monitor.start();

}publicString getFilePath() {returnfilePath;

}public voidsetFilePath(String filePath) {this.filePath =filePath;

}publicFileAlterationListener getAlterationListener() {returnalterationListener;

}public voidsetAlterationListener(FileAlterationListener alterationListener) {this.alterationListener =alterationListener;

}public longgetIntervalTime() {returnintervalTime;

}public void setIntervalTime(longintervalTime) {this.intervalTime =intervalTime;

}

}

packagecom.bijian.study.listener;importjava.io.File;importorg.apache.commons.io.monitor.FileAlterationListener;importorg.apache.commons.io.monitor.FileAlterationObserver;public class FileListener implementsFileAlterationListener {

@Overridepublic voidonStart(FileAlterationObserver observer) {//TODO Auto-generated method stub

System.out.println("onStart()");

}

@Overridepublic voidonDirectoryCreate(File directory) {//TODO Auto-generated method stub

System.out.println("onDirectoryCreate()");

}

@Overridepublic voidonDirectoryChange(File directory) {//TODO Auto-generated method stub

System.out.println("onDirectoryChange()");

}

@Overridepublic voidonDirectoryDelete(File directory) {//TODO Auto-generated method stub

System.out.println("onDirectoryDelete()");

}

@Overridepublic voidonFileCreate(File file) {//TODO Auto-generated method stub

System.out.println("onFileCreate()");

}

@Overridepublic voidonFileChange(File file) {//TODO Auto-generated method stub

System.out.println("onFileChange()");

}

@Overridepublic voidonFileDelete(File file) {//TODO Auto-generated method stub

System.out.println("onFileDelete()");

}

@Overridepublic voidonStop(FileAlterationObserver observer) {//TODO Auto-generated method stub

System.out.println("onStop()");

}

}

至此完成啟動項目,在指定文件夾D:/SVN/下增加、修改、刪除文件都會觸發相關方法。

附:解決onApplicationEvent方法被執行兩次以上的問題

原因:

在web 項目中(spring mvc),系統會存在兩個容器,一個是root application context ,另一個就是我們自己的 projectName-servlet context(作為root application context的子容器)。在一個類里面實現了ApplicationListener接口,用于在初始化完成后做一些事情,但是Debug或輸出日志,發現它執行了3次,其中一次是Spring 框架初始化時執行,另外兩次是在項目啟動成功后,加載Spring-MVC時執行的。

解決方法:

1.根據對象值來告訴定時器只執行一次

通過打 breakpoint看到,這兩次執行中,onApplicationEvent(ContextRefreshdEvent event)方法中的 event對象值不同,第一次是 Root WebApplicationContext , 據此可以根據對象值來告訴定時器只執行一次即可,如如上實例所示,在這我System.out.println輸出((XmlWebApplicationContext)event.getSource()).getDisplayName()。

packagecom.bijian.study.listener;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.springframework.web.context.support.XmlWebApplicationContext;importcom.bijian.study.monitor.FileMonitor;public class ContextFileListener implements ApplicationListener{

@AutowiredprivateFileMonitor fileMonitor;private static boolean isStart = false;

@Overridepublic voidonApplicationEvent(ContextRefreshedEvent event) {if(event.getSource() instanceofXmlWebApplicationContext){

System.out.println(((XmlWebApplicationContext)event.getSource()).getDisplayName());if(((XmlWebApplicationContext)event.getSource()).getDisplayName().equals("Root WebApplicationContext")){try{

fileMonitor.monitor();

fileMonitor.start();

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

}

System.out.println(((XmlWebApplicationContext)event.getSource()).getDisplayName());輸出的內容如下所示:

Root WebApplicationContext

WebApplicationContextfor namespace 'springMVC-servlet'WebApplicationContextfor namespace 'springMVC-servlet'

2.使用一個類變量isStart,控制只執行一次

packagecom.bijian.study.listener;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.context.ApplicationListener;

importorg.springframework.context.event.ContextRefreshedEvent;

importorg.springframework.web.context.support.XmlWebApplicationContext;

importcom.bijian.study.monitor.FileMonitor;

public class ContextFileListener implements ApplicationListener{

@Autowired

privateFileMonitor fileMonitor;

private static boolean isStart = false;

@Override

public voidonApplicationEvent(ContextRefreshedEvent event) {

if (!isStart) {

isStart = true;

try{

fileMonitor.monitor();

fileMonitor.start();

} catch(Exception e) {

e.printStackTrace();

}

}

}

}

總結

以上是生活随笔為你收集整理的java 监听窗口是否改变_JAVA项目监听文件是否发生变化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。