java调用dllwinexec

编译原理调研报告_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理调研报告
&&辽宁工程技术大学编译原理调研报告
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩3页未读,
定制HR最喜欢的简历
你可能喜欢豆丁微信公众号
君,已阅读到文档的结尾了呢~~
java调用exe文件 matlab 调用c文件 c文件调用c 函数 mfc 调用exe js调用exe python调用c文件 java 调用exe vc 调用exe php 调用exe python 调用exe
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C++调用其他EXE文件
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口java程序中用Runtime.getRuntime().exec()启动别的运行程序Pro2并调用waitFor()
等待其运行结束时,如果Pro2程序向标准输出或错误信息输出端打印信息的话,可能
导致Pro2不能正常运行(比如图形界面无法显示必须等到父程序退出时才能显示)。
这可能是由于这些信息阻塞了程序,将这些信息读掉是一个不怎么好的办法,下面是
一个实例,不过有漏洞。
execProcess = Runtime.getRuntime().exec(pro2);
InputStream stderr =
InputStream stdin =
byte[] buf = new byte[1024];
int len1 = 0, len2 = 0;
stdin = execProcess.getInputStream();
stderr = execProcess.getErrorStream();
while ( (len1 = stdin.available()) & 0 ||
(len2 = stderr.available()) & 0) { //可能某个时刻恰好都没有,但程序后面会产生
while (len1 & 0) {
if (len1 & 1024) {
stdin.read(buf, 0, 1024); //也可能会发生阻塞
len1 -= 1024;
stdin.read(buf, 0, len1); //也可能会发生阻塞
while (len2 & 0) {
if (len2 & 1024) {
stderr.read(buf, 0, 1024); //也可能会发生阻塞
len2 -= 1024;
stderr.read(buf, 0, len2); //也可能会发生阻塞
stderr.close();
stdin.close();
execProcess.waitFor();
将pro2的输出重定位到某个文件(比如日志文件),可能能更好地解决这个问题
1.process.waitFor() 暂停等待被调用的process的执行,process执行结束之后,以下代码继续执行...
waitFor()一直等待,线程阻塞问题
waitFor()一直等待,线程阻塞问题 —转载–Java中使用Runtime和Process类运行外部程序使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程...
关于Runtime.getRuntime().exec 进程会一直被挂起,一直在等待的原因。
为了方面广大程序员,我还是决定将改bug写在我的博客上。
在网上查找到的关于Runtime.getRuntime().exec执行命令的方法首先出现的的是这个:
Process...
Java中Process和Runtime()使用,以及调用cmd命令阻塞在process.waitfor( )的问题解决
转自:http://249wangmang.blog.163.com/blog/static//
最近在java中调用perl程序,由于perl...
Java进程Runtime、Process、ProcessBuilder调用外部程序
通过Java执行系统命令,与cmd中或者终端上一样执行shell命令,最典型的用法就是使用Runtime.getRuntime().exec(command)或者new ProcessBuilder(...
C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数
1)system(shell命令或shell脚本路径);
执行过程:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数stri...
一个进程调用exec()函数来运行一个新程序。之后该进程的代码段、数据段和堆栈段就被新程序的所代替。新程序从自己的main()函数开始执行。
简单的exec()调用的例子
最近进行zip操作,从网上找到一个处理方法,但是经过试验存在一些bug,主要是文件流的申明存在问题,导致jvm一直占用文件而不释放,特意把自己修改的发出来,已备记录
import java....
exec( )函数族 :
   下面我们来看看一个进程如何来启动另一个程序的执行。在Linux中要使用exec函数族。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文...
exec系列函数用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数...
没有更多推荐了,404 Not Found
404 Not Found
nginx/1.14.0java中native方法
public class JniTest {
public String key = "jason";
public static int count = 9;
public native static String getStringFromC();
public native String getString2FromC(int i);
//访问属性,返回修改之后的属性内容
public native String accessField();
public native void accessStaticField();
public native void accessMethod();
public native void accessStaticMethod();
public static void main(String[] args) {
String text = getStringFromC();
System.out.println(text);
JniTest t = new JniTest();
text = t.getString2FromC(6);
System.out.println(text);
System.out.println("key修改前:"+t.key);
t.accessField();
System.out.println("key修改后:"+t.key);
System.out.println("count修改前:"+count);
t.accessStaticField();
System.out.println("count修改后:"+count);
t.accessMethod();
t.accessStaticMethod();
//产生指定范围的随机数
public int genRandomInt(int max){
System.out.println("genRandomInt 执行了...");
return new Random().nextInt(max);
//产生UUID字符串
public static String getUUID(){
return UUID.randomUUID().toString();
//加载动态库
System.loadLibrary("jni_study");
}c中对native方法的实现
#define _CRT_SECURE_NO_WARNINGS
#include "com_dongnaoedu_jni_JniTest.h"
#include &string.h&
//#include &Windows.h&
//函数实现
JNIEXPORT jstring JNICALL Java_com_dongnaoedu_jni_JniTest_getStringFromC
(JNIEnv *env, jclass jcls){
//WinExec("C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQScLauncher.exe",0);
//JNIEnv 结构体指针
//env二级指针
//代表Java运行环境,调用Java中的代码
//简单的实现
//将C的字符串转为一个java字符串
return (*env)-&NewStringUTF(env,"C String");
JNIEXPORT jstring JNICALL Java_com_dongnaoedu_jni_JniTest_getString2FromC
(JNIEnv *env, jobject jobj, jint num){
return (*env)-&NewStringUTF(env,"C String2");
//每个native函数,都至少有两个参数(JNIEnv*,jclass或者jobject)
//1)当native方法为静态方法时:
//jclass 代表native方法所属类的class对象(JniTest.class)
//2)当native方法为非静态方法时:
//jobject 代表native方法所属的对象
//基本数据
//Java基本数据类型与JNI数据类型的映射关系
//Java类型-&JNI类型-&C类型
boolean jboolean
//引用类型(对象)
//String jstring
//object jobject
//数组,基本数据类型的数组
//byte[] jByteArray
//对象数组
//object[](String[]) jobjectArray
//C/C++访问Java的成员
//1.访问属性
//修改属性key
JNIEXPORT jstring JNICALL Java_com_dongnaoedu_jni_JniTest_accessField
(JNIEnv *env, jobject jobj){
//jobj是t对象,JniTest.class
jclass cls = (*env)-&GetObjectClass(env, jobj);
//jfieldID
//属性名称,属性签名
jfieldID fid = (*env)-&GetFieldID(env, cls, "key", "Ljava/lang/S");
//jason && super jason
//获取key属性的值
//Get&Type&Field
jstring jstr = (*env)-&GetObjectField(env, jobj, fid);
printf("jstr:%#x\n",&jstr);
//jstring -& c字符串
//isCopy 是否复制(true代表赋值,false不复制)
char *c_str = (*env)-&GetStringUTFChars(env,jstr,JNI_FALSE);
//拼接得到新的字符串
char text[20] = "super ";
strcat(text,c_str);
//c字符串 -&jstring
jstring new_jstr = (*env)-&NewStringUTF(env, text);
//Set&Type&Field
(*env)-&SetObjectField(env, jobj, fid, new_jstr);
printf("new_jstr:%#x\n", &new_jstr);
return new_
//访问静态属性
JNIEXPORT void JNICALL Java_com_dongnaoedu_jni_JniTest_accessStaticField
(JNIEnv *env, jobject jobj){
jclass cls = (*env)-&GetObjectClass(env, jobj);
//jfieldID
jfieldID fid = (*env)-&GetStaticFieldID(env, cls, "count", "I");
//GetStatic&Type&Field
jint count = (*env)-&GetStaticIntField(env, cls, fid);
//SetStatic&Type&Field
(*env)-&SetStaticIntField(env,cls,fid,count);
//2.访问java方法
JNIEXPORT void JNICALL Java_com_dongnaoedu_jni_JniTest_accessMethod
(JNIEnv *env, jobject jobj){
jclass cls = (*env)-&GetObjectClass(env, jobj);
//jmethodID
jmethodID mid = (*env)-&GetMethodID(env, cls, "genRandomInt", "(I)I");
//Call&Type&Method
jint random = (*env)-&CallIntMethod(env, jobj, mid, 200);
printf("random num:%ld",random);
//静态方法
JNIEXPORT void JNICALL Java_com_dongnaoedu_jni_JniTest_accessStaticMethod
(JNIEnv *env, jobject jobj){
jclass cls = (*env)-&GetObjectClass(env, jobj);
//jmethodID
jmethodID mid = (*env)-&GetStaticMethodID(env, cls, "getUUID", "()Ljava/lang/S");
//CallStatic&Type&Method
jstring uuid = (*env)-&CallStaticObjectMethod(env, cls, mid);
//随机文件名称 uuid.txt
//jstring -& char*
//isCopy JNI_FALSE,代表java和c操作的是同一个字符串
char *uuid_str = (*env)-&GetStringUTFChars(env, uuid, JNI_FALSE);
char filename[100];
sprintf(filename, "D://%s.txt",uuid_str);
FILE *fp = fopen(filename,"w");
fputs("i love you", fp);
fclose(fp);
}访问java中的属性和方法都是固定的格式,访问java中的属性时其中一个参数为属性签名,而属性签名有固定的格式,
访问方法时则要手动生成方法签名
在java的src进入运行窗口输入javah 全类名然后就会产生这个类的所有方法和属性签名,如果不进入文件下,则要输入全路径
系统类可以直接在运行窗口输入javap -s -p 全类名生成
(*env) -& GetStringUTFChars()方法的最后一个参数表示是否copy字符串,copy的值由jni内部决定,一般传入为NULL,如果copy则表示java中和jni操作的不是一个字符串,操作的的java中的复制,如果为false,则java和jni操作的是同一个字符串。也就是变相的指针,表示String的引用是否指向同一个引用。
Jni访问java的属性,方法
基本属于翻译。 首先必须存在之前传入的jobject obj,在根据 JNIEnv来获取jclass。jclass cls = (*env)-&GetObjectClass(env, obj);当获取...
(二)JNI 访问 java 属性和方法
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文纯个人学习笔记,由于水平有限,难免有所出错,有发现的可以交流一下。
一、JNI 访问 java 属性值
JNI 调用 C ...
[JNI]开发之旅(6)JNI函数中访问java类中对象的属性
JNI函数的实现在c/c++中实现的,如果想访问java中定义的类对象的实例域需要三个步骤:
1.通过GetObjectClass()函数获得该对象的类class,返回值是一个jclass;
Java中的一个类怎么调用另一个类中的方法?
如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话看情况,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象...
JNI学习(三)、JNI本地方法访问Java端的属性和方法
在JNI调用中,肯定会涉及到本地方法操作Java类中数据和方法。在Java1.0中“原始的”Java到C的绑定中,程序员可以直接访问对象数据域。然而,直接方法要求虚拟机暴露他们的内部数据布局,基于这个...
Android NDK 开发(三)JNI 调用Java属性和方法
native方法虽然是native的,但毕竟是方法,那么就应该同其他方法一样,能够访问类的属性和方法。实际上,JNI的确可以做到这一点,我们通过几个例子来说明~
原文链接请标明:
JNI学习总结——C/C++访问Java类的属性与方法
在C/C++本地代码中访问Java端的代码,一个常见的应用就是获取类的属性和调用类的方法。为了在C/C++中表示Java类的属性和方法,JNI在Jni.h头文件中定义了jfieldID和jmethod...
Adnroid ndk 中jni访问java方法、对象、成员变量
JNI文件夹下,C++源码extern &C&
JNIEXPORT void JNICALL Java_ndk_test_JNI_accessJavaMethod(JNIEnv *env,job...
JNI访问Java数组方法
这篇文章写的非常好
http://leo.ugr.es/elvira/devel/Tutorial/Java/native1.1/implementing/array.html...
没有更多推荐了,}

我要回帖

更多关于 java调用c 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信