发布网友 发布时间:2022-04-19 22:43
共1个回答
热心网友 时间:2023-09-15 08:44
通过JNI调用一个库文件(.dll),这个dll中包含一个实现清屏功能(system(“cls”))的导出函数。在java程序中加入代码调用这个库,即可实现当前屏幕的清屏。(--JNI的使用,以及dll的制作在百度随便搜索即可找到,这里请恕不多谈^_^--)\x0d\x0a \x0d\x0a实现步骤:\x0d\x0a1.写一个dll.h\x0d\x0a \x0d\x0a#ifndef _Included_Cls \x0d\x0a#define _Included_Cls \x0d\x0a#ifdef __cplusplus \x0d\x0aextern "C"\x0d\x0a{ \x0d\x0a#endif \x0d\x0aJNIEXPORT void JNICALL Java_Cls_clear \x0d\x0a(JNIEnv *, jobject); \x0d\x0a#ifdef __cplusplus \x0d\x0a} \x0d\x0a#endif \x0d\x0a#endif\x0d\x0a2.再写一个dllmain.c\x0d\x0a \x0d\x0a#include "jni.h"\x0d\x0a#include "dll.h" \x0d\x0a#include "stdlib.h" \x0d\x0aJNIEXPORT void JNICALL Java_Cls_clear(JNIEnv *env, jobject obj) \x0d\x0a{ \x0d\x0asystem("cls");\x0d\x0a}\x0d\x0a \x0d\x0a3.用vc++建立一个dll工程(我的工程名为clsTest)\x0d\x0a导入dllmain.c 和dll.h以及jdk下include目录下的jni.h和include/win32下的jni_md.h 共四个文件\x0d\x0a然后build 这个dll工程,将生成的clsTest.dll放入到你的java.library.path中的其中一个目录下\x0d\x0a查看java.libray.path用代码System.out.print(System.setProperty("java.library.path","."));\x0d\x0a我是根据我的配置将clsTest.dll放到C:/Program Files/Java/jdk1.6.0/jre/bin下\x0d\x0a4.测试\x0d\x0a新建一个测试类Test.java\x0d\x0a \x0d\x0apublic class Test{ \x0d\x0apublic native void clear();//左方的native是通知Java这个函数会使用到外部函数 \x0d\x0a \x0d\x0astatic { \x0d\x0aSystem.loadLibrary("clsTest"); //左方的代码代表我要载入clsTest.dll的动态链接\x0d\x0a}\x0d\x0apublic static void main(String[] args) { \x0d\x0afinal Test a=new Test();\x0d\x0aRunnable k=new Runnable(){\x0d\x0a public void run(){\x0d\x0a for(int i=0;i<20;i++){\x0d\x0a System.out.println(i);\x0d\x0a try {\x0d\x0a Thread.sleep(1000); \x0d\x0a a.clear();\x0d\x0a } catch (Exception e) {\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a };\x0d\x0ak.run();//执行线程\x0d\x0a} \x0d\x0a}\x0d\x0a5.在cmd下 javac Test.java\x0d\x0ajava Test\x0d\x0a即可看到运行效果^_^~\x0d\x0a \x0d\x0a注:该解决方案只解决控制台程序的刷屏,且必须是系统控制台,而eclipse等其它IDE的控制台是无法用这种方式进行清屏的,如果要实现,必须使用入侵IDE的进程,因为在eclipse的内置控制台右击邮件有个clear功能,实际上就是个setText(null)事件,入侵IDE就是要在外部制造这个事件,其它IDE要也差不多。\x0d\x0a同样,java的这种刷屏解决方案也适用于linux,不同是其链接库文件是.so,总之原理是差不多的。