Jnotify在linux下的使用出现的问题解决
来源:互联网 发布:电脑 视频编辑软件 编辑:程序博客网 时间:2024/05/21 08:12
Jnotify程序代码:
import net.contentobjects.jnotify.JNotify;import net.contentobjects.jnotify.JNotifyListener;public class JnotifyForLinux {public static void main(String[] args){String monitedPath = "/tmp";int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;System.out.println("------Start Watching DIR: /tmp");boolean watchSubtree = true;try{int watchID = JNotify.addWatch(monitedPath,mask,watchSubtree,new Listener());Thread.sleep(1000000);System.out.println("Timeout:Stop Watching!");boolean res = JNotify.removeWatch(watchID);if(!res){System.out.println("Release Watching Error!");}}catch(Exception e){e.printStackTrace();}}public static class Listener implements JNotifyListener{public void fileRenamed(int wd,String rootPath,String oldName,String newName){print("rename"+rootPath+":"+oldName+"--->"+newName);}public void fileModified(int wd,String rootPath,String name){if(!name.endsWith("swp") && !name.endsWith("swp/") && !name.endsWith("swpx") && !name.endsWith("swpx/")){print("[modified]"+rootPath+":"+name);}}public void fileDeleted(int wd,String rootPath,String name){if(!name.endsWith("swp") && !name.endsWith("swp/") && !name.endsWith("swpx")&& !name.endsWith("swpx/")){print("[deleted]"+rootPath+":"+name);}}public void fileCreated(int wd,String rootPath,String name){if(!name.endsWith("swp") && !name.endsWith("swp/") && !name.endsWith("swpx")&& !name.endsWith("swpx/")){print("[created]"+rootPath+":"+name);}}void print(String msg){System.err.println(msg);}}}
在linux运行以上代码:
(1)编译时找不到jnotify-0.94.jar中的类,可以设置classpath路径,也可以使用下面的命令行参数,进行编译:
javac -cp .:jnotify-0.94.jar JnotifyForLinux.java
-cp 后面不要忘加当前目录.
(2)运行时,执行下面的命令:
java -cp .:jnotify-0.94.jar JnotifyForLinux
出现错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jnotify in java.library.path
这是因为程序运行时在动态链接库的搜索路径中找不到libjnotify.so(前面的lib是前缀,后面的.so是后缀)
把libjnotify.so放入java.library.path中,查看java.library.path用如下代码:
public class javalibpath {public static void main(String[] args){System.out.println(System.getProperty("java.library.path"));}}这个变量可能会有多个位置,随便将jnotify压缩包中附带的libjnotify.so文件加入到其中的任何一个路径中即可。
接着运行又出现问题:
java.lang.UnsatisfiedLinkError:/usr/bin/libjnotify.so:/usr/bin/libjnotify.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)
原因是引入的libjnotify.so是64位系统的,而本身工程布置的linux为32位机,libjnotify.so与linux内核不符,换成32位的。
再接着又出现问题:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/bin/libjnotify.so: /lib64/libc.so.6: version `GLIBC_2.12' not found
根据网友说明两种方法:
(1)重新编译libjnotify.so
我的处理方法是在本机重新编译libjnotify.so,如下:
·首先将源代码中的以下三个文件拷贝到某一目录下
net_contentobjects_jnotify_linux_JNotify_linux.c
inotify-syscalls.h
net_contentobjects_jnotify_linux_JNotify_linux.h
·然后进行编译,如下
-bash-3.1$ gcc -I /usr/java/jdk1.6.0_45/include/ -I /usr/java/jdk1.6.0_45/include/linux/ -fPIC -g -c net_contentobjects_jnotify_linux_JNotify_linux.c -o libjnotify.o
-bash-3.1$ gcc -g -shared -W1 -o libjnotify.so libjnotify.o -lc
-bash-3.1$ ls
inotify-syscalls.h libjnotify.so net_contentobjects_jnotify_linux_JNotify_linux.h
libjnotify.o net_contentobjects_jnotify_linux_JNotify_linux.c
这里要引入 jni 需要的库,而且版本要和操作系统相匹配。使用 uname -a 查看操作系统的版本,java -version 查看JDK版本。我这里操作系统和JDK都是64位版本。
此时可以正常使用libjnotify.so了。
正确的执行过程如下:
- -bash-3.1$ ls
- jnotify-0.94.jar JNotifyTest.java libjnotify.so
- -bash-3.1$ javac -cp .:jnotify-0.94.jar JNotifyTest.java
- -bash-3.1$ java -cp .:jnotify-0.94.jar JNotifyTest
- -bash-3.1$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
- -bash-3.1$ java -cp .:jnotify-0.94.jar JNotifyTest
- Monitoring /usr/local/study/jnotify3
参考:
http://blog.csdn.net/akon_vm/article/details/9329089
http://xiaobenbenxiong.iteye.com/blog/1706197
http://lichuanbao.iteye.com/blog/1532951
- Jnotify在linux下的使用出现的问题解决
- JNotify JNI动态库在Linux下的编译
- JNotify的使用
- JNotify的使用
- JNotify的使用
- JNotify 的简单使用(Linux命令行环境)
- Qt在linux下调用phonon出现的问题解决办法
- mysql在linux下的乱码问题解决
- 在VMware下安装Ubuntu12后出现的问题解决方法
- java中Jnotify文件监视库的使用
- 一些在使用wordpress会出现的问题解决方法:
- 在SDK中使用GDI+出现的编译问题解决方法
- JNotify使用
- JNotify使用
- JNotify使用
- linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决
- freemind 在linux下的各种问题解决方案汇总
- weblogic在linux下启动会卡住的问题解决
- NSTimer的简单使用
- 斐波那契数列推论
- ROC
- 面对升职,他辞职了
- 今天我成为了CSDN博客专家
- Jnotify在linux下的使用出现的问题解决
- 启动代码与bootloader的关系
- cocos2dx加快游戏速度
- ORACLE的一些函数、存储过程范例
- 东北大学计算机专业(专业硕士)研究生入学考试2009真题
- NDk AndRoid
- 源文件与模块生成时的文件不同
- 【HDFS】存储balancer到底咋回事
- HDU1010(解题报告)