Java如何实现清屏(CMD版)

参照: 更新时间:2018年05月26日 09:45:57 作者:雅钧

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)

JNI简介
JNI是Java Native Interface的缩写,**它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。**从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。
例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。 简单的来说JNI就是方便了Java调用c,c++语言的函数;java通过JNI提供接口(头文件),c,c++实现这些函数供java调用。
在java中没有提供清屏的接口,所有可以通过jni调用c语言的system(“cls”)清屏。当然,仅限于cmd清屏,不支持eclipse的控制台console清屏。

步骤:

第一步:准备Clear.h文件

  1. 编写java的清屏native接口。
public class Clear {static{System.loadLibrary("clear");//加载clear.dll动态库}//如果下面在Dog窗口使用javac  xxx命令出现乱码问题时,把注释去掉就行public native static void clsCmd();//清屏}

编码错误情况示例:(前面那一大串是我的文件路径,每个人的都不一样)你可以在文件夹显示路径的地方输入:cmd就在当前路径打开dog窗口了

2.编译Clear.java,生成Clear.class

3.用javah生成对应的c语言头文件Clear.h

javah命令:
java开发中如果使用到JNI,则难免需要使用javah来生成C++或C的头文件信息,下面小编就直接说说javah的命令:
--------第一种:直接cd到当前程序的target/class目录下(maven项目,如果是普通项目则到bin目录下) 然后使用:javah com.yongcheng.liuyang.utils.TestJni,其中javah后面的是需要生成头文件类的全路径(包名+类名),当然生成的.h文件位于当前class的目录下。
--------第二种:直接在运行中cmd到dos窗口,使用如下命令:javah -classpath D:\QulityBg\SpringMVCTest\target\classes com.yongcheng.liuyang.utils.TestJni
其中-classpath后跟当前程序在磁盘上的位置,该位置只写到class路径或者bin路径,后面是需要生成头文件类的全路径。

好了以上就是javah的简单使用,当然也可以增加一些参数,比如常见的-d,即就是将生成的头文件存放的位置,具体可直接使用javah -h查看响应的参数以及含义。--------参照 博客园–倾慕已久
4.生成后如图所示:

第二步:使用Visual Studio创建win32工程,生成对应的dll动态库

动态库又称动态链接库,英文为DLL(Dynamic Link Library 的缩写形式)。
DLL是一个包含可由多个程序同时使用的代码和数据的库,但DLL并不是可执行文件。
动态链接只是提供了一种方法,使进程可以调用不属于其可执行代码的函数。而函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux下为.so后缀。

首先需要明白的是,在java中是不能直接调用动态库文件的,因为动态库文件是使用c或是c++编写的,作为一种跨 平台的编程语言,java提供了一些用来读取dll文件方法,而其中一种方法就是使用JNI

  1. 创建工程
    文件中

    新建桌面向导
    (如果没有在下载VS时候导入这个项目类型,可以在windows点击这个东西,选择修改,然后安装windows桌面开发)






    2.把第一步生成的头文件Clear.h,以及需要依赖的两个头文件jni.h和jni_md.h导入工程

    jni.h在jdk的安装路径include目录下。
    jni_md.h在jdk安装路径include目录中的win32目录下。
    把这三个头文件先复制粘贴到工程项目目录下:(上面我们建立的工程下)

  2. 然后在VS中把它们导入:

头文件—>添加—>现有项—>选中上边的三个头文件—>添加

    把Clear.h头文件中的 #include <jni.h>  改为  #include “jni.h”



4.添加.cpp文件,编写c代码。

  源文件--->添加--->新建项--->C++文件:clear.cpp
#include "Clear.h"
#include <iostream>
JNIEXPORT void JNICALL Java_Clear_clsCmd
(JNIEnv *, jclass) {system("cls");//c的清屏
}

5 .设置生成64位dll动态库


6.生成dll

解决方案—>右键生成


…完成

第三步: 测试

1.把clear.dll复制到第1,2步Clear.class所在目录.
编写测试类

public class TestJNI {public static void main(String[] args) {System.out.println("hello jni");Clear.clsCmd();//清屏}
}

3 编译测试类

 javac TestJNI.java

4 执行测试类

 java TestJNI完美清屏,搞定!!


Java如何实现清屏(Cmd版)相关推荐

  1. java jni清屏_java使用jni清屏(只针对cmd)

    在java中没有提供清屏的接口,所有可以通过jni调用c语言的system("cls")清屏.当然,仅限于cmd清屏,不支持eclipse的控制台console清屏. 步骤: 1. ...

  2. eclipse java清屏代码_Eclipse控制台实现清屏的方法

    [Java]Eclipse控制台清屏方法 最近在跟着教学课程学习Java语言,老师之前是做职业程序猿的. 最近布置了一个简单的课后作业,就是在控制台去模仿ATM机的界面,并实现一些基本的业务逻辑. 在 ...

  3. Java中的一些清屏方法(汇总)

    虽然Java中的GUI编程已经很方便,但我们还是时不时地需要在命令行中实现图形化效果(比如实验要求233),下面给出一些在Java中实现清屏或类似清屏效果的方法. 1.简单暴力法 (也就是输出许多空行 ...

  4. IDEA清空控制台以及Java中运行cmd命令实现清屏操作

    文章目录 IDEA中清空控制台方法 解决办法: 一:打印换行 二:通过按键事件控制键盘执行清空控制台动作 三:附:Java 按键事件 KeyEvent 四:使用鼠标箭头触发按钮实现清空控制台操作 Wi ...

  5. java实现cmd黑窗口控制台清屏

    写一个java的简单程序基于cmd运行的jar时,想要在小程序跳转其它菜单页时先清除下屏幕,类似cmd中直接输入cls命令,实现如下 代码实现 /**控制台清屏* @throws IOExceptio ...

  6. java break 在if 中使用_Java | 使用JNA在Java中实现cls(cmd清屏)功能

    作者:庄周de蝴蝶 出自:掘金 原文:juejin.im/post/6876454367332368392 编写 dll文件 由于本文不是专门讲解如何编写dll文件的,而且我也不是一个专业的C家族语言 ...

  7. java调用cmd清屏_Java | 使用JNA在Java中实现cls(cmd清屏)功能

    前言 本文将通过示例代码讲解如何在Java中通过使用JNA来调用cls命令行清屏功能,代码已同步到GitHub,此外本文不是专门讲解JNA的使用的,如需学习可到GitHub查看官网示例,下面我就开始通 ...

  8. Java实现清屏功能

    一.cmd命令行下实现清贫 1.编写一个类ClearScreen.java,代码如下: public class ClearScreen{ //实现清屏方法的接口 public native stat ...

  9. java console清屏_JAVA 控制台清屏 | 学步园

    看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想.所以把这些内容总结一下. 直观一点,先看下代码吧 import static java.lang.System.out; /** * ...

最新文章

  1. 完整代码+实操!手把手教你操作Faster R-CNN和Mask R-CNN
  2. 09Oracle Database 数据表数据插入,更新,删除
  3. android仿ios弹框_在“提示”框中:iOS外观(在Android上运行),Google Maps作为Time Machine,下载Wii游戏保存...
  4. node实现简单的群体聊天工具
  5. ServiceComb中的数据最终一致性方案
  6. 避免使用PHP保留字作为常量、类名和方法名,以及命名空间的命名
  7. 太极团队首发:iOS 8.3完美越狱工具发布
  8. linux如何查看隐藏进程中勒索病毒,.FileFuck勒索病毒删除+数据恢复(HiddenTear变体)...
  9. Aurix 多核链接文件 lsl --- 下篇
  10. VMware虚拟机无法识别U盘解决方案
  11. 安装xmanager linux系统,xmanager linux版
  12. 如何在统信UOS系统中设置tomcat开机启动
  13. 关于在在Fragment中Edittext中不显示输入法
  14. docker个人容器云(基于阿里云)
  15. 椭圆一般方程参数求解
  16. 腾讯面试题: 百度搜索为什么那么快?
  17. FreeEIM 网站地图 A
  18. 跨浏览器CSS文本模糊效果
  19. Android 百分比布局
  20. 天下2:45级双修弈剑心得个人见解

热门文章

  1. 中国联通成为2020年的最大输家,用户净流失超千万
  2. gdal库中设置prj4库全路径的用法
  3. 工控机添加pcie无线网卡记录(CentOS8)Intel AC 7260
  4. 对日方向的程序员怎么快速学习日语
  5. 「产品中心」AIM-M系列医疗IT绝缘监测故障定位装置及系统介绍
  6. layui table 可编辑单元格 JS实现通过键盘上下左右键 光标焦点移动到旁边的编辑行/列
  7. 《惢客创业日记》2019.10.05(周六)九月份的工作总结
  8. Python基于Django毕业设计论文选题系统设计
  9. 专访筷云李小军:创新是企业持续保持活力的源泉
  10. gcc编译可执行文件和cmake编译可执行文件