当前位置:首页 » 编程语言 » linuxc调用java

linuxc调用java

发布时间: 2023-05-29 13:18:25

java中可以调用linux下编写的C可执行程序吗(如果C程序名称为:exec) Java代码如何写呢

当然可以..java native ..得c配合写jni..

这个调用一般是三种方式.具体内容..你自己琢磨去

1.jni方式.需要c那端写jnijava写接口
2.jna.jni的一个变种.不需要c做过多工作..
ps以上两条如果写不好都不稳定
3.process.execute() 说白了就是命令行模式.缺点是进程形式的不可控
4.http方式..这个比较好.就是让c用cgi写个web服务.你用java采集.最好用json来做通讯

⑵ 如何利用Linux下的shell编程调用java类

为什么要用shell调用java类,
Linux没有办法调用的只有java程序中可以调用。

懂了,你是想要运行你已经编写好的java程序而已不是想要调用java类。想调用只能新建一个例如a.java在里面调用然后
>javac
a.java
>java
a
这样用命令执行
如果直接想要执行的话可以直接用命令(假如有main方法的是main.java文件)
>javac
main.java
>java
main就行了

⑶ 怎么用linux命令启动java的cs应用程序

linux终端下运行Java程序,需要安装JDK。
这里先介绍如何安装JDK,然后介绍如何安装Java程序。
首先,打开终端,快捷键ctrl+alt+t;
安纳绝装JDK,sudo apt-get install openjdk-7-jdk( 注意,这里需要输入密码);
切换到java程序所在的目录;
编译以.java结尾的程序,可以使用javac *.java编译当前目录嫌历下所有的java源程序,并生成相应的class文件;
假芹茄搜如含有主程序的类文件是MP3.java,则使用java MP3运行该java程序。

⑷ Linux环境下java调用C

你的JNI 写错了吧

java里的 char和 C的char完全不是一回事

java里你要写 stringjava_encryptpswd(string Password, string EncryptedKey );

生成的 C头文件,应该是 jstring java_encryptpswd(JEnvi* pEnvi,jstring Password,jstring EncryptedKey)

我手写的,没查资料,大概是这样。。

然后第一个参数是当前虚拟机事例,里面有很多可用的函数

后面两个是java里字符串结构,在C里面的表示法, 其实它就是指针而已。

然后你可以用pEnvi里的函数,将java的string,转化成 c的string。

然后调用 C的头文件的函数,得到结果,在组装成java的字符串。

比如例子:

我要用C来实现 java的字符串定位。

No.1 定义java的本地接口
public native String NAConvert(String arg1,String arg2);

No.2 生成头文件
JNIEXPORT jstring JNICALL Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv *, jobject, jstring, jstring);

No.3 自己创建一个实现文件,实现上面函数
jstring Java_com_test_mainandroid_MainAndroidNative_NAConvert
(JNIEnv* env, jobject obj, jstring arg1, jstring arg2)
{
jsize len = env->GetStringLength(arg1);
jchar* pBuf = new jchar[len+1];
env->GetStringRegion(arg1,0,len,pBuf);

jclass m = env->FindClass("java/lang/String");

jmethodID mid = env->GetMethodID(m,"charAt","(I)C");

jchar c = env->CallCharMethod(arg1,mid,1);

return arg1 ;
}

第一个是虚拟机事例指针,第二个参数是接口方法所在对象的 this。
第三个及以后才是你的接口的参数。
java里传入的所有对象参数,在C里面都是句柄。必须要用第一个参数env才能解析其中含义。

⑸ 如何从C中调用Java函数使用JNI

1. 编写并编译J2C.java
import java.lang.management.ManagementFactory;

import java.lang.management.RuntimeMXBean;
public class J2C
{
static
{
try{
// 此处即为本地方法所在链接库名
System.loadLibrary("j2c");
} catch(UnsatisfiedLinkError e)
{
System.err.println( "Cannot load J2C library:\n " +
e.toString() );
}
}
//声明的本地方法
public static native int write2proc(int pid);
public static void main(String[] args){
//获取本进程(即主线程)的pid
final RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
final String info = runtime.getName();
final int index = info.indexOf("@");

if (index != -1) {
final int pid = Integer.parseInt(info.substring(0, index));
System.out.println(info);
System.out.println(pid);
write2proc(pid);
}

try{
Thread.sleep(8000);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}

note:Java程序中System.loadLibrary参数名表示要载入的C/C++共享库,第6步生成的共享库名必须与该参数一致,即System.loadLibrary(Name) 对应共享库名libName.so (共享库名必须以lib开头)
2. 生成C头文件J2C.h:javah J2C
/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>
/* Header for class J2C */

#ifndef _Included_J2C
#define _Included_J2C
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: J2C
* Method: write2proc
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_J2C_write2proc
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif

note:1. 头文件自动生成,不要修改它;
2. 函数JNIEXPORT jint JNICALL Java_J2C_write2proc(JNIEnv *, jclass, jint);
按照注释的说明是在J2C.java文件的类J2C的方法write2proc处定义,故C程序的实现函数必须与该处签名一致;
3. 编写C程序J2C.c
#include <stdio.h>

#include "J2C.h"
JNIEXPORT int JNICALL Java_J2C_write2proc(JNIEnv * env, jobject arg, jint pid)
{
printf("current pid is %d\n", pid);
return 0;
}

4. 编译C程序

因为C程序里#include "J2C.h"而J2C.h又#include <jni.h>, 而gcc里面默认环境并不知道jni.h是什么东西,故编译时需要告诉编译器jni.h的位置( jni.h在jdk 的$JAVA_HOME/include下面),所以才有了上面的编译参数;
因为使用gcc编译得到动态库,在jni调用的时候,某些情况会有异常, 可尝试改用g++。
总结
1. Java中方法的原型声明与C/C++对应的实现文件定义必须一致(可以通过自动生成的C/C++头文件来比较),尤其是类名和方法名;
2. Java中System.loadLibrary()载入的共享库名必须与后面C/C++生成的共享库名一致。

⑹ 怎么根据linux c/c++ 开发的d-bus服务生成java 的调用接口文件

Java可以通过JNI调用本地C语言方法,而本地C语言方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式),通过调用本地的库袭肆文件的内部方法,使Java可以实现和本地机器的紧密联核旦系,调用系统级的各接口方拍氏轿法

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372