@dallaslu 卢达 幻想牢骚,奇淫巧技

Java Dos 清屏

学习 Java 的过程中,经常编个控制台程序来做些测试。在命令行里运行Java程序时,清屏真是个麻烦的事情。但是不清屏,这程序实在没法看。最后还是实现了,哈哈。

先讲如何使用。

下载 cls.rar

只适合 Windows 系统。

解压之后得到 CLS.class  和 cls.dll 。把两者放到同一文件夹下(比如跟你的 class 文件放到相同目录)。在你的程序中需要清除屏幕输出时,调用方法 CLS.CLS() ,即可实现。

cls

这个是演示,Java 程序刚刚启动时候的效果。

下面开始扯淡。

哥,你这是刷屏

刚遇到这问题时候 Google 了半天。在某论坛也有人问这个问题。某人回答到:

输出100个换行试试?

然后另一人回复:

我怎么觉得你这不是清屏,像是刷屏呢?

哈哈,当时我就笑喷了。说点正经的,有个方法多数人都提到过,但是不管用:

Runtime

比如下面两种办法:

Runtime.getRuntime().exec("cmd   /c   cls");
 
Runtime.getRuntime().exec("exec.bat");//批处理之中有一句 cls

第一个办法打开了一个新的 DOS 窗口,并没有实现原窗口清屏。第二种我试了几次,完全没有效果。

JNI

这个还是很靠谱的,虽然有点大材小用了。之前也见有人提到挂载 DLL 文件来实现,但还是一头雾水。直到找到了《Java and the DOS "CLS" command》这篇文章。

其实如果你装好了 JDK 和 VC++,直接按照文中所描述的办法就OK 了。我做了些许改动。先建立 CLS.java:

public class CLS {
static {
System.loadLibrary("cls");
}
public native static void CLS();
}

编译过后,执行 javah CLS 来获得 CLS.h 。接着同文件夹下建立 c.cpp :

#include
#include "CLS.h"
#include 
 
JNIEXPORT void JNICALL Java_CLS_CLS(JNIEnv *, jclass){
system("cls");
}

好了,来执行个命令编译:

cl -IC:\j2sdk1.4.2\include -IC:\j2sdk1.4.2\include\win32 -LD c.cpp -cls.dll

这个 C:\j2sdk1.4.2 换成你的 JDK 安装目录。然后我们就拿到 CLS.class 和 cls.dll 了。

背后的血泪

我先是试了几张光碟,好在有没划坏的。重新装了一下 VC++,结果丫提示我安装没成功。我一看,还真是,环境变量没设置。更糟糕的是,我装的是 java 1.6,竟然没找到 JDK 目录,现从另外机器把一堆头文件拷贝过来的。接着把所有需要的头文件、库文件统统拷贝到 C:\Program Files\Microsoft Visual Studio\VC98\Bin 目录,把各文件中的 #include <*.h> 都改成了 #include "*.h" ,嘿嘿,虽然费劲,也编译成功了。

Linux 怎么办?

我记得,在 Ubuntu 终端里面,Ctrl+H 是清屏——不过是伪清屏,不过是把滚动条拉下来而已。

记得要编译成 cls.so。

不琢磨了,睡觉去。

7 条评论

  1. 都开始折腾 Java 了,太牛了你!!

  2. jo32

    我在netbean里面以CLS.class和CLS.dll作为库添加进去,但是编译过不了。
    然后在SRC或者class文件夹里面添加此两文件,编译还是过不了。

  3. caiweiqun

    CLS.class 这个能不能看看源代码啊 我十分感谢啊?

发表评论

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">