精华内容
下载资源
问答
  • JAVA 控制台清屏

    千次阅读 2011-06-09 23:11:00
    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。直观一点,先看下代码吧import static java.lang.System.out;/** * Build by netbeans * @author Felix Wu */public ...

    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。

    直观一点,先看下代码吧

    import static java.lang.System.out;
    /**
     * Build by netbeans
     * @author Felix Wu
     */
    public class ConsleRewriteTest {
        public static void main(String[] agrs) {
            out.print(          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
            pause();
            out.print( "/r" + "                                                         " );
            
            int total = 100;
            for( int i=1; i<total; i++ ) {
                pause();
                out.print( "/r" + i + "/"+total  );
            }
        }

        private static void pause() {
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                //Swallow this exception
            }
        }
    }

    严格上说控制台是Java进程的输出设备。在Java中对应System.out流,对这个流而言你只能向其中输入内容。那么Java程序怎么和他控制台通讯呢?

    方式一:通过ASCII码的控制字符'/r'.

                '/r'表示回车,就回到行首。'/n'表示换行,即移到下一行(光标垂直下移,如果光标在原行的第n个字符位置,那么就下移到下一行的第n个字符位置)。那么"/r/n"表示回车换行,即移到下一行的行首。

                注意上面对'/r'和'/n'的解释是ASCII码标准含义。但是不同的软件对'/n'解释不尽相同。比如按照ASCII码的标准解释回车换行是"/r/n",而UNIX为了节约存储空间,其API在保存采用ASCII编码的文本时用'/n'替代"/r/n",相应的在读取显示时'/n'效果等效于"/r/n"。简而言之,在UNIX的API中'/n'的意思是回车换行("/r/n")而不是标准的换行。JVM也采用了这个风格。但是在Windows系统中其API采用了'/n'的标准本意。对'/n'的不同解释,造成了同样的文本在不同的软件中的显示效果不相同。

    方式二:和输出设备通讯.

                这个方式我没有尝试过,不过用JNI可以实现。输出设备可能是软件(比如常见的控制台窗口),也可能是硬件。如果是软件的话,Java程序和此软件通讯,让其清屏(提供此功能的情况下)。如果是硬件可以和驱动通讯让其清屏(提供此功能的情况下)。

    对应上面给的例子,不要直接在NB6.8中运行,因为NB6.8的控制台没有解析'/r'控制字符,这应该是其一个bug。在window上可以直接在cmd中运行。

    展开全文
  • Java控制台清屏

    万次阅读 2010-06-12 12:20:00
    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。直观一点,先看下代码吧import static java.lang.System.out; /**  * Build by netbeans  * @author Felix Wu  *...

    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。

    直观一点,先看下代码吧

     

    import static java.lang.System.out;
    /**
     * Build by netbeans
     * @author Felix Wu
     */
    public class ConsleRewriteTest {
        public static void main(String[] agrs) {
            out.print(          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
            pause();
            out.print( "/r" + "                                                         " );
           
            int total = 100;
            for( int i=1; i<total; i++ ) {
                pause();
                out.print( "/r" + i + "/"+total  );
            }
        }

        private static void pause() {
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                //Swallow this exception
            }
        }
    }

     

    严格上说控制台是Java进程的输出设备。在Java中对应System.out流,对这个流而言你只能向其中输入内容。那么Java程序怎么和他控制台通讯呢?

    方式一:通过ASCII码的控制字符'/r'.

                '/r'表示回车,就回到行首。'/n'表示换行,即移到下一行(光标垂直下移,如果光标在原行的第n个字符位置,那么就下移到下一行的第n个字符位置)。那么"/r/n"表示回车换行,即移到下一行的行首。

                注意上面对'/r'和'/n'的解释是ASCII码标准含义。但是不同的软件对'/n'解释不尽相同。比如按照ASCII码的标准解释回车换行是"/r/n",而UNIX为了节约存储空间,其API在保存采用ASCII编码的文本时用'/n'替代"/r/n",相应的在读取显示时'/n'效果等效于"/r/n"。简而言之,在UNIX的API中'/n'的意思是回车换行("/r/n")而不是标准的换行。JVM也采用了这个风格。但是在Windows系统中其API采用了'/n'的标准本意。对'/n'的不同解释,造成了同样的文本在不同的软件中的显示效果不相同。

     

    方式二:和输出设备通讯.

                这个方式我没有尝试过,不过用JNI可以实现。输出设备可能是软件(比如常见的控制台窗口),也可能是硬件。如果是软件的话,Java程序和此软件通讯,让其清屏(提供此功能的情况下)。如果是硬件可以和驱动通讯让其清屏(提供此功能的情况下)。

     

    对应上面给的例子,不要直接在NB6.8中运行,因为NB6.8的控制台没有解析'/r'控制字符,这应该是其一个bug。在window上可以直接在cmd中运行。

    展开全文
  • 看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。直观一点,先看下代码吧import static java.lang.System.out;/*** Build by netbeans* @author Felix Wu*/public class ...

    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想。所以把这些内容总结一下。

    直观一点,先看下代码吧

    import static java.lang.System.out;

    /**

    * Build by netbeans

    * @author Felix Wu

    */

    public class ConsleRewriteTest {

    public static void main(String[] agrs) {

    out.print(          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );

    pause();

    out.print( "/r" + "                                                         " );

    int total = 100;

    for( int i=1; i

    pause();

    out.print( "/r" + i + "/"+total  );

    }

    }

    private static void pause() {

    try {

    Thread.sleep(1000L);

    } catch (InterruptedException e) {

    //Swallow this exception

    }

    }

    }

    严格上说控制台是Java进程的输出设备。在Java中对应System.out流,对这个流而言你只能向其中输入内容。那么Java程序怎么和他控制台通讯呢?

    方式一:通过ASCII码的控制字符'/r'.

    '/r'表示回车,就回到行首。'/n'表示换行,即移到下一行(光标垂直下移,如果光标在原行的第n个字符位置,那么就下移到下一行的第n个字符位置)。那么"/r/n"表示回车换行,即移到下一行的行首。

    注意上面对'/r'和'/n'的解释是ASCII码标准含义。但是不同的软件对'/n'解释不尽相同。比如按照ASCII码的标准解释回车换行是"/r/n",而UNIX为了节约存储空间,其API在保存采用ASCII编码的文本时用'/n'替代"/r/n",相应的在读取显示时'/n'效果等效于"/r/n"。简而言之,在UNIX的API中'/n'的意思是回车换行("/r/n")而不是标准的换行。JVM也采用了这个风格。但是在Windows系统中其API采用了'/n'的标准本意。对'/n'的不同解释,造成了同样的文本在不同的软件中的显示效果不相同。

    方式二:和输出设备通讯.

    这个方式我没有尝试过,不过用JNI可以实现。输出设备可能是软件(比如常见的控制台窗口),也可能是硬件。如果是软件的话,Java程序和此软件通讯,让其清屏(提供此功能的情况下)。如果是硬件可以和驱动通讯让其清屏(提供此功能的情况下)。

    对应上面给的例子,不要直接在NB6.8中运行,因为NB6.8的控制台没有解析'/r'控制字符,这应该是其一个bug。在window上可以直接在cmd中运行。

    展开全文
  • 然而在设计显示棋盘的时候,我震惊地发现使用Windows下Java实现控制台清屏还真的没什么办法。为了更新棋盘,当然要频繁清空控制台的显示。控制台作为显示本来就够low了,要是再没点要求,那也太混了。 ​ 网上查找了...

    使用JNI实现Windows下的控制台清屏(JDK13)

    ​ 事情的起因是这样的:学校的实验课要求做一个棋类的应用,自己设计spec来实践软件知识。然而在设计显示棋盘的时候,我震惊地发现使用Windows下Java实现控制台清屏还真的没什么办法。为了更新棋盘,当然要频繁清空控制台的显示。控制台作为显示本来就够low了,要是再没点要求,那也太混了。

    ​ 网上查找了一圈,总体来说有几种:

    ​ ①:打印到输出一堆空行,直接把上一层的输入顶出显示区域。简直要把人看乐了。这有什么用啊??鼠标滚轮挪一挪,拙劣的实现方法就暴露无遗了。这就好像大学校舍里的破旧宿舍楼,留在校园内部,外部用一圈好看的大楼藏住,有什么用啊,大学是公共区域谁都能进,往里一看就都知道了。

    ​ ②:stackoverflow上的答案,被人用机翻翻了好几个版本,意思是调用RunTime.getRuntime().exec(“cls”)来执行命令行的清屏命令。可是在IDEA中实际用了一下却报错,不知道为什么找不到这个命令,明明在cmd中直接cls是可以的啊?也许是IDEA的问题。不过后来我不纠结这一点了,因为原来这个方法的效果是在新开的进程中执行命令,那样的话即便cls能执行,也不能影响到当前进程。网上似乎还有方法将标准输出重定向,但是为了实现一个清屏功能,显得过于大费周章。

    ​ ③:使用Java本地方法,调用本地的c语言的dll,c中的函数只需要System(“cls”)就行了,很方便。不过这方面网上的教程都不是很全,正好权当学学JNI了。

    ​ 在开始之前,确定你的Windows中已经安装了MinGW。

    JNI

    ​ JNI就是Java Native Interface,顾名思义,是用来跟本地的方法交互的。既然强调了是本地的,而Java的关键特点是虚拟机跨平台,很显然JNI是为了通过Java执行其他语言的程序而准备的了。

    ​ 首先编写一个ClearScreen类,类中声明一个本地函数 Cls。

    public class ClearScreen
    {
    
        public static native void cls();
    }
    

    ​ 那之后,进入此源文件所存在的文件夹(作者这里操作的文件夹为idea项目下的src文件夹中的子文件夹P3,意味着包名为P3)打开命令行程序cmd,输入

    javac -h -jni ClearScreen.java
    

    ​ 新版的JDK将Javah集成在javac中。如果你在网上找教程,很多稍微旧一些的都告诉你去JDK安装目录下的bin文件夹找javah,但如果你用新版的JDK就要使用形如这样的命令。

    在这里插入图片描述

    ​ 然后该目录将自动生成其字节码和一个 -jni文件夹(建议将其更名,或者在使用命令生成头文件时就明确指出生成路径,否则这个自带的文件夹名字的”-“会让你在之后的命令中很难受),此文件夹中包含了对应的头文件P3_ClearScreen.h。

    ​ 这里简单介绍一下JNI对本地的函数的命名要求:

    ​ 1)必须使用完整的Java函数名来命名,这意味着必须加上完整的包名。在我的示例里就是P3.ClearScreen.cls。

    ​ 2)用_替换所有的句号并加上 “Java_” 前缀,在本例中这意味着Java_P3_ClearScreen_cls。

    ​ 3)如果类名中存在非ASCII字母或数字例如“$",或大于’\u007f‘的unicode字符,使用_0xxxx来替代它们,其中xxxx为该字符对应的16进制Unicode序列。

    ​ 4)如果你重载了本地方法,那么在上述操作得到的结果中,你必须在对应函数的名字后面再加上两个下划线”__“,然后是编码后的参数类型,这样就能区分重载的函数了,具体的编码格式可以自行搜索哈。

    ​ 接下来使用MinGW中的gcc来编译c文件。注意我已经将自动生成的-jni文件夹重命名为jni。

    ​ -I参数表示include。在你的系统中将我的”D:\JDK13"替换成你自己的路径。
    在这里插入图片描述

    ​ 命令执行成功后在当前目录下生成一个ClearScreen.o。那之后,使用

    gcc -Wl,--add-stdcall-alias -shared -o ClearScreen.dll ClearScreen.o
    

    ​ 命令生成对应的dll。

    ​ 在Java程序中调用这个函数之前,确保已经导入了这个库。

    ​ 可以使用System.load()函数导入动态链接库。然而,该函数的参数要求必须是绝对路径。对此,可以使用

    System.getproperty()获得当前运行的路径,来达到类似相对路径的目的。

    System.load(System.getProperty("user.dir") + "\\src\\P3\\ClearScreen.dll");
    

    ​ 在IDEA里运行一下试试看。

    在这里插入图片描述

    ​ 嗯?搞什么,在该清屏的时候打印一个显示不出的字符?

    ​ 好吧,看起来IDEA的终端与这个命令不兼容。

    ​ 在目录下用命令行java运行再试试。

    在这里插入图片描述

    ​ 嗯,这才像样。

    参考:

    IntelliJ IDEA平台下JNI编程(一)—HelloWorld篇

    展开全文
  • 最近写了个java的定时器程序,因为在C/C++中有system("cls")可以进行清屏,然而在java中却从来没发现过相关功能的方法,在网上搜了很久也没找到成功的解决方案,所有的方案都是带有喜剧性的,1.Runtime.getRuntime()...
  • 因为java的最底层是jvm,所以单纯的控制台java程序不能感知jvm再下面的操作系统的情况,可以通过JNI(Java Native Interface)技术实现java后台调用C++/C的dll(Dynamic Linkable Library,动态链接库)文件。...
  • JAVA 控制台清屏 2

    万次阅读 2011-06-09 23:12:00
    最近写了个java的定时器程序,因为在C/C++中有system("cls")可以进行清屏,然而在java中却从来没发现过相关功能的方法,在网上搜了很久也没找到成功的解决方案,所有的方案都是带有喜剧性的,1.Runtime.getRuntime()...
  • 今天打算从头学习java,之前图快忽略了很多细节。现在才发现欲速则不达,指过于性急图快,反而不能达到目的。出自《论语·子路》:“无欲速,无见小利。欲速则不达,见小利则大事不成。”很多内容没有用代码进行实现...
  • 在程序运行之前先判断输入的参数个数是否合法。如果不合法,则提醒用户的程序执行不,并退出程序。...如果信息正确则显示“欢迎雷柔光临...”,否则显示“错误的用户名及密码”*/import java.util.Scanner;public class...
  • JAVA实现控制台清屏效果

    千次阅读 2019-04-01 19:44:48
    JAVA实现控制台清屏效果,使用ProcessBuilder类。 /** * 该方法只在CMD窗口下有效 * @author HYQ95612 * */ public class ControlWindowsConsole { // 参数一 "/k"保留窗口"/c"关闭窗口 // 参数二 "cls"或者...
  • 控制台清屏转载自 https://blog.csdn.net/qq_18144681/article/details/51222405 按任意键返回主菜单 System.in.read(); 清屏 public static void clear() throws AWTException { Robot r = new Robot(); ...
  • /**控制台清屏 * @throws IOException * @throws InterruptedException */ public void clearScreen() throws IOException, InterruptedException { // 新建一个 ProcessBuilder,其要执行的命令是 cmd.exe...
  • C++中控制台可以用system("cls"),但是java中有没对应的函数呢?
  • Java】Eclipse控制台清屏方法最近在跟着教学课程学习Java语言,老师之前是做职业程序猿的。最近布置了一个简单的课后作业,就是在控制台去模仿ATM机的界面,并实现一些基本的业务逻辑。在控制台用System.out....
  • package 清屏; import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class 清屏 { public static void main(Stri...
  • java控制台清屏

    万次阅读 2008-09-04 12:25:00
    最近写了个java的定时器程序,因为在C/C++中有system("cls")可以进行清屏,然而在java中却从来没发现过相关功能的方法,在网上搜了很久也没找到成功的解决方案,所有的方案都是带有喜剧性的,1.Runtime.getRuntime()...
  • 最近写写代码是遇到一个问题是关于在控制台如何实现清屏操作? 有写过在控制台实现清屏功能的高手吗?求教???
  • 标签:因为java的最底层是jvm,所以单纯的控制台java程序不能感知jvm再下面的操作系统的情况,可以通过JNI(Java Native Interface)技术实现java后台调用C++/C的dll(Dynamic Linkable Library,动态链接库)文件。...
  • Eclipse控制台实现清屏的方法

    万次阅读 多人点赞 2016-04-22 18:34:06
    Java】Eclipse控制台清屏方法最近在跟着教学课程学习Java语言,老师之前是做职业程序猿的。最近布置了一个简单的课后作业,就是在控制台去模仿ATM机的界面,并实现一些基本的业务逻辑。在控制台用System.out....
  • 当然,仅限于cmd清屏,不支持eclipse的控制台console清屏。步骤:1. 编写java清屏native接口。public classClear {static{System.loadLibrary("clear");//加载clear.dll动态库}public native static v...
  •  \033[2J 清屏   \033[K 清除从光标到行尾的内容   \033[s 保存光标位置   \033[u 恢复光标位置   \033[?25l 隐藏光标   \33[?25h 显示光标   文章装载: ...
  • 实现的CLI需要有清屏功能,在概要设计的时候本以为通过Java调用本地的clear命令可以实现,但貌似没戏。网上的方法大致有两种,

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

java控制台清屏

java 订阅