如何调用一个windows上的应用程序呢?
--------------------------------------------------------------------------------
可以用Runtime,使用的例子如下:
///
Runtime runtime=Runtime.getRuntime();
Process process = Runtime.getRuntime().exec("cmd /c mysql.exe <p2hp-initiate_database.sql -uroot -pchengen");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String ls_1;
while ( (ls_1=bufferedReader.readLine()) != null) System.out.println(ls_1);
///
上面的程序调用mysql程序将sql文件导入到数据库服务器中~
基本上你要实现在Java的console上面是不太可能的。。有人实现了希望告诉我一下阿。(我对console和gui不是很熟的,我不是专门搞这个的)
1.写一段Java代码。
/** * Increment 1 every 1 second and keep the output in the * same line on the Console. */package com.console;/** * Increment 1 every 1 second. * @author jiafanz */public class IncrementOneEvery1Sec{ //the right command line usage message private final static String MESSAGE = "Usage: java <path_and_filename> \n" + "\t(to execute the class file)\n\n" + "where path_and_filename indicates the system file path and name.\n\n" + "e.g. java IncrementOneEvery1Sec \r\n"; private static int value = 0; /** * This is a native method to invoke a c program. * @param value the vlaue to be printed */ public native void printConsole(int value); /** * Load the library. * * Then the runtime system later loads this shared library * into the Java class that requires it. * * a static initializer. * * e.g. * Solaris system converts "hello" to "libhello.so" * Windows system converts "hello" to "hello.dll" */ static { System.loadLibrary("printconsole"); } /** * Main method entry point. * @param args the main method argument */ public static void main(String[] args) { if (args.length != 0) { // user provided wrong parameters System.err.println("wrong parameter length."); System.out.println(MESSAGE); System.exit(1); } IncrementOneEvery1Sec test = new IncrementOneEvery1Sec(); try { while (true) { Thread.sleep(1000); test.printConsole(++value); } } catch (InterruptedException ex) { ex.printStackTrace(); } }}
基本上注释很全的,我就不解释了。
然后compile
2.生成 .h file
javah -jni com.console.IncrementOneEvery1Sec
(fully qualified modifier)
3.Native Method Implementation
(这里就我们的可爱的C了)
#include <jni.h>#include "com_console_IncrementOneEvery1Sec.h"#include <stdio.h>#include <stdlib.h>JNIEXPORT void JNICALL Java_com_console_IncrementOneEvery1Sec_printConsole(JNIEnv *env, jobject obj, jint value){ system("cls"); printf("%d\n", value); return;}
注意要用到stdlib这个头文件噢,不要忘了。
4.用gcc或者cl生成dll..(我用的是CL)
cl -IC:\jdk1.5.0_06\include -IC:\jdk1.5.0_06\include\win32 -LD IncrementOneEvery1SecImp.c -Feprintconsole.dllMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.507Copyright (C) Microsoft Corporation. All rights reserved.IncrementOneEvery1SecImp.cMicrosoft (R) Incremental Linker Version 8.00.50727.42Copyright (C) Microsoft Corporation. All rights reserved./dll/implib:printconsole.lib/out:printconsole.dllIncrementOneEvery1SecImp.obj Creating library printconsole.lib and object printconsole.exp
5.好拉,下面就可以用了。
(不要在Eclipse里面运行,好象有点问题的)
java -Djava.library.path=<yourDllFolder> <YourClass>
e.g.
java -Djava.library.path=C:\cjsdn\cjsdn\clib\cjsdn com.console.IncrementOneEvery1Sec
(我这里的cmd)
能看出我是用心写的。。斑竹加分阿。
嘉帆
如何调用一个windows上的应用程序呢?相关推荐
- 写一个Windows上的守护进程(4)日志其余
写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流 ...
- 如何实现在Windows上运行Linux程序,附示例代码
如何实现在Windows上运行Linux程序,附示例代码 微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On ...
- 写一个Windows上的守护进程(7)捕获异常并生成dump
写一个Windows上的守护进程(7)捕获异常并生成dump 参考文章: (1)写一个Windows上的守护进程(7)捕获异常并生成dump (2)https://www.cnblogs.com/mk ...
- windows上后台运行程序
在Linux上我们可以通过 nohup & 来在后台运行程序或者命令 在windows上我们也可以有类似的操作 那就是通过start /b 我们可以通过 start /? 来查看start的用 ...
- 创建一个windows服务的小程序及注意事项
1,首先在vs中创建一个windows服务项目 会生成一个Service1.cs的文件 打开该文件 切换到代码视图 有两个方法 OnStart(string[] args)和OnStop()方 ...
- 我的第一个Windows Phone 7应用程序
本来一直没有过做移动开发的想法,前短时间被CSDN一个移动大会"挑逗"的有点"心血来潮"!恰好赶上Windows Phone 7新上市,就试试吧. 目前很难找到 ...
- linux 正在运行的程序不能拷贝_如何实现在Windows上运行Linux程序,附示例代码
初步了解ELF格式 首先让我们先了解什么是原生Linux程序, 以下说明摘自维基百科 In computing, the Executable and Linkable Format (ELF, fo ...
- 亚洲运动会简称亚运会,2022年的第19届在中国杭州举办,迎接亚运做一个线上健步走小程序活动,ElementById(“yayun“).innerHTML = “你好 亚运“;
</head> <body><h1>我的网页</h1> <p id="demo">我的第一个段落.</p> ...
- 在windows上开发linux程序
1. 概述 由于工作需要,希望能把现有代码移植到linux.基于此目的,最近做了些调研和实验. 由于自己并没有太多的linux下的工作经验,所以不考虑直接在linux平台下工作,开发. 好在现在VSC ...
最新文章
- Splay ---- 文艺平衡树区间翻转的建树模式
- spring aop使用详解
- firefox英文网页乱码解决方法
- mfc控件随框变化(EasySize的用法,仔细看绝对有用)
- 添加和更改webstorm主题
- 「leetcode」135.分发糖果【贪心算法】详细图解
- 洛谷P3749 [六省联考2017]寿司餐厅
- win10 FTP搭建全过程
- B 站, YYDS!看了这些 Java视频,我直呼好家伙!!!
- RFBnet论文翻译:感受野块网络对于精确的和快速的目标检测
- 微信小程序 实现路线规划
- python selenium模拟浏览器操作实战(武汉大学原教务系统)
- 解决zabbix微信报警web界面显示已送达,但微信收不到的问题
- docker(ELK) - logstash-elasticsearch-kibana
- java阳历转为阴历错了一天_Java 阴历阳历转换
- 音频信号转为开关控制信号_盘点模拟量信号和开关量信号区别与应用
- warning: LF will be replaced by CRLF in ****. The file will have its original line endings in y
- 为了反击爬虫,前端工程师的脑洞可以有多大?
- ARM中MRS汇编指令
- 免注册免登录,微信小程序 ChatGPT 智能问答一键体验
热门文章
- vlf 用法_什么是SQL虚拟日志文件(又名SQL Server VLF)?
- sql azure 语法_Azure Data Studio中SQL Server架构比较扩展
- angularjs -- 监听angularJs列表数据是否渲染完毕
- 部署Smokeping
- SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间
- VBA-设置打印页面的范围
- HDU-5876 Sparse Graph
- Android开发技术周报 Issue#77
- IOS发送带附件的邮件
- NetBeans+xdebug解决无法连接xdebug问题