求E语言通过java支持库调用jar包时参数传递教程

作者&投稿:岛峡 (若有异议请与网页底部的电邮联系)
c++通过JNI调用jar包中某个java类,该类实现了其他包中的接口,如何填写路径找到该类~

FindClass用的是类的全名,和在什么jar包里用什么配置没关系……

我不是很清楚你说的在eclipse运行正常是指什么,eclipse其实只是个IDE(集成开发环境),他提供你一个代码编辑器和代替你编译生成class文件来执行而已。所以你所说的设置成编码UTF-8,我估计只是把他的代码编辑器设置成了UTF-8格式这样的话,举个例子,我想输出一个字符串,直接写在代码里中文的话,他会认为这个中文是你设置的UTF-8格式的,可能就可以正常输出结果。但如果你的代码在输出时并没有指定文件编码,变成了通过用户输入某个字,然后再输出的话,那样在执行时就会默认读取系统编码,那样就变成GBK了,如果你需要用的是UTF8来处理,那自然就会乱码所以关键问题是你的程序中没有明确指定encoding(编码)举个例子,java的InputStreamReader类,一般用的时候只会用到InputStreamReader(InputStreamin)这个构造函数,但其实是可以用InputStreamReader(InputStreamin,Charsetcs)构造函数来指定encoding的比如:newInputStreamReader(newFileInputStream(filePath),"UTF-8")

Java加载jar文件并调用jar文件当中有参数和返回值的方法

在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的。就写了个Demo代码。

以下的类可以编译生成hello.jar文件。

1 package org.lele.fatpanda;
2    3 public class Util
4 {
5     public static String myName;
6     /*  7      * 无参数,无返回值的方法。
8      */   9     public static void getVersion()  
10     {  
11         System.out.println("java version: " + System.getProperty("java.version") );  
12     }  
13     /* 14      *有参数,无返回值的方法。
15      */  16     public static void setTmpName(String name)  
17     {  
18         myName = name;  
19         System.out.println("Set Tmp Name Succeed and the name is : " + myName);  
20     }  
21     /* 22      * 单个参数,有返回值的方法。
23      */  24     public static String getName(String prefix)  
25     {  
26         return prefix + "lele";  
27     }  
28     /* 29      * 多个参数,有返回值的方法。
30      */  31     public static String test(String i1, int i2)  
32     {  
33         return i1 + i2;      
34     }  
35       36 }  
37 /* 38  * 一个生成jar文件的类文件,要使用public的访问权限,如果在方便进行反射调用,则要将方法声明为static。
39  */  

下面的就是实现动态加载并调用的主要代码。

1 package com.xiyoulele.wh;
2    3 import java.io.File;
4 import java.lang.reflect.Method;
5 import java.net.URL;
6 import java.net.URLClassLoader;
7    8 public class Main
9 {  
10     public static void main(String[] args)  
11     {  
12         URL[] urls = new URL[] {};  
13         MyClassLoader classLoader = new MyClassLoader(urls, null);  //自定义ClassLoader来加载jar文件  14           15         try   16         {  
17             classLoader.addJar(new File("c:\\hello.jar").toURI().toURL());  //加载特定路径的jar文件  18             Class<?> clazz = classLoader.loadClass("org.lele.fatpanda.Util"); //动态加载jar文件当中的特定类的class文件    
19               20             //传入一个参数一个返回值  21           22             Class<?>[] typeA = new Class[1];  //传入要调用的方法的参数类型  23             typeA[0] = String.class;  
24               25             Object[] objsA = new Object[1];  //传入要调用的方法的具体参数  26             objsA[0] = new String("xiyou");  
27               28             Method method =  clazz.getMethod("getName", typeA);  //获取要被调用的特定方法  getName(String xx)  29               30             String result = method.invoke(clazz, objsA).toString(); //调用方法,获取方法的返回值。  31               32             System.out.println(result);  //输出方法      
33               34             //传入2个参数一个人返回值  35               36             Class<?>[] typesB = new Class[2];  
37             typesB[0] = String.class;  
38             typesB[1] = Integer.TYPE;  
39               40             Object[] ObjsB = new Object[2];  
41             ObjsB[0] = new String("ZT");  
42             ObjsB[1] = new Integer(520);  
43               44             Method newMethod = clazz.getMethod("test", typesB);  
45             String res = newMethod.invoke(clazz.newInstance(), ObjsB).toString();  
46               47             System.out.println(res);  
48               49             //有传入的参数,没有返回值  50             Class<?>[] typesC = new Class[1];  
51             typesC[0] = String.class;  
52               53             Object[] objsC = new Object[1];  
54             objsC[0] = new String("xiyoulele");  
55               56             Method methodC = clazz.getMethod("setTmpName", typesC);  
57             methodC.invoke(clazz.newInstance(), objsC);  
58               59             //无参数,无返回值  60             Method methodD = clazz.getDeclaredMethod("getVersion");  
61             methodD.invoke(clazz.newInstance());                
62               63             classLoader.close();  //关闭类的加载器  64               65         } catch (Exception e)  
66         {            
67             e.printStackTrace();  
68         }  
69     }    
70     //继承URLClassLoader来实现对jar文件的加载  71     static class MyClassLoader extends URLClassLoader  
72     {  
73         public MyClassLoader(URL[] urls)  
74         {  
75             super(urls);  
76         }  
77         public MyClassLoader(URL[] urls, ClassLoader parent)  
78         {  
79             super(urls, parent);  
80         }  
81         public void addJar(URL url)  
82         {  
83             this.addURL(url);  
84         }  
85     }  
86 }  
87 /* 88  * 需求:加载jar文件,动态调用里面的方法,该方法带有参数和返回值。
89  */

程序运行的结果:




E:\\java\\Figure2.java:325: 可能损失精度 找到: double 需要: int...
double型数据(浮点型 含小数) 强制 转换为 int型数据(整型 整数) 时 丢失小数部分,损失精度~~~ 如果是 你需要将其转换成int型的话 就不用在意了

java e.printStackTrace() 什么意思呢?
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。用在 try{ BufferedReader input=new BufferedReader(new InputStreamReader(System.in));String inputLine=input.readline();int i=Integer.parseInt(inputLine).intValue();} catch(Exception e){ e.printStackTrace() ;...

java generics 里面的<E>是什么意思?
<E>是只Java泛型。泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。在Java SE 1.5之前,没有泛型的情况的下,通过对类型...

怎么用java 从{ 'a', 'b', 'c', 'd', 'e'}中取3个不同的字母用2维数组...
给你一个清晰明了的, COPY出去就能跑起来,改成递归的了,不管原来的字母怎么排都可以保证按照字典顺序输出。import java.util.Set;import java.util.TreeSet;public class Permutation { public static void main(String[] args) { if (ary == null || n > ary.length || n == null || n...

java中什么叫泛型??
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。这带来了很多好处:类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个...

用JAVA写一个a,b,c,d,e排列组合算法,谢谢了
public class Paixu { public static void main(String[] args) { char[] in = "abcde".toCharArray();new Paixu().paixu(in, in.length, 0);} private void paixu(char[] array, int n, int k) { if (n == k) { char[] out = new char[n];for (int i = 0; i < array....

什么是易语言
★和其它编程语言互溶互通,学习掌握易语言对掌握其它编程语言具有桥梁作用。★编程理念互通。支持完全面向对象的程序开发技术和面向事件的程序驱动技术。★功能调用互通。可以和其它编程语言之间相互调用功能模块。★充分利用已有资源。支持OCX组件、TypeLib类型库、操作系统API、JAVA类等。★多语言支持。现已有...

java该怎么自学?
我最近在自学java,自己也有一些c的基础,现在想请教各位编程高手,从学习Java语言到真正的能够利用java进行web开发与软件开发,在这中间的学习步骤有哪些?还有能不... 我最近在自学java,自己也有一些c的基础,现在想请教各位编程高手,从学习Java语言到真正的能够利用java进行web开发与软件开发,在这中间的学习步骤有哪些?

java编程软件eclipse怎么安装(java软件eclipse安装教程)
4.在下面找到“eclipseIDEforjavadevelopers”的选项。在选项右边有一个“32bit”和“64bit”。根据自己电脑的配置,选择其中一个。 5.然后点击“download”。耐心等待下载完成。 6.将下载好的压缩文件解压后,就可以使用了 拓展资料: Eclipse是著名的跨平台的自册蔽由集成开发环境(IDE)。最初主要用来Java语言开发,...

java,<E>什么意思?
泛型 就是指任意类型 比如 HashMap<K,V> 你用的时候 你可以将K,V 设置成任意类 HashMap<String,Integer> K,V 和那个E 一样 HashMap<String,Integer> 这表示一个类 这个类有两个子变量类型是 String Integer 可以这样理解

香坊区19878638650: 请问一下广大的网友们请问易语言中的JVAV支持库有什么? -
肥储谷苏: 调用JAVA的类,简单的说,是另一种支持库的类型,如:别人用JAVA开发了一个web服务器.只要在易语言中的支持支持库中 申明对该类的引用(加载、创建) 就可以直接使用该功能.但是 使用JAVA 支持库需要有 JAVA虚拟机的存在, JDK 有 70M左右,一般不会为了使用JAVA程序而去装个JAVA虚拟机.

香坊区19878638650: 易语言中JAVA 支持库怎么应用,代码
肥储谷苏: .版本 2.支持库 Javalib.子程序 _按钮1_被单击.局部变量 a, Java虚拟机a.创建 (, )

香坊区19878638650: 使用jdk命令 -
肥储谷苏: 假如你的源文件在E:\JAVA\test\目录下 具体步骤是: 打开cmd命令窗口,输入 E: 回车, 进入E:\ 然后用cd JAVA\test 命令 进入E:\JAVA\test 这个时候在使用javac命令即可下面是环境变量的配置过程: 1.在桌面上找到“我的电脑”图标,在...

香坊区19878638650: 使用java解释器运行源文件生成哪个字节码文件 -
肥储谷苏: 如:类A E:\test\A.java javac(java编译器)编译源文件A.java--》A.class字节码文件:[E:\test> javac A.java] java (解释器) 执行刚刚的字节码文件A.class :[E:\test> java A] (注;[ ...]是在dos命令提示符中的命令) 如果有多个.class字节码文件,在java XX 中的那个XX就是那个含有mian方法的类对应的文件.

香坊区19878638650: 如何在C++中嵌入JAVA程序 -
肥储谷苏: 简单回答:据我所知,在当前应该办不到.相关知识:1、当前的JAVA,运行机制是调用JAVA支持环境提供的功能调用.它不是真正的二进制机器码.可以说,它的运行过程是基于边解释边运行的.所以,从运行效率与速度上去体验与感受,...

香坊区19878638650: 易语言java支持库怎样运行jar服务器控制台文件 -
肥储谷苏: 用易语言调用windwos命令行 java -jar xxx.jar 会有回显的

香坊区19878638650: 易语言支持库和数据库是什么?如何调用? -
肥储谷苏: 支持库:易语言官方或者爱好者,将一些功能直接封装起来,供人使用,这种封装的“功能包”,也叫“函数包”,就是支持库.有了支持库,你可以只关心软件的功能,而不用关心如何去实现这个功能了. 数据库:百度百科上有很权威的正统解释,我也不想多说,拿大白话说,数据库就是用来存储数据的一个特殊的“包”.支持库的调用:凡是支持库,都包括一些命令或者常数什么的,命令会有命令本体和参数两部分,你查看一下支持库的说明大体上就知道这个支持库该怎么用了. 数据库的调用:必须由专门的程序语言来进行数据库的存储过程.这个过于复杂,不多解释了.详情可以参见易语言的数据库教程部分.

香坊区19878638650: 易语言的Java虚拟机支持库怎么用? -
肥储谷苏: 建一个变量,类型是“JAVA虚拟机”,就可以操作该支持库了

香坊区19878638650: java调用DLL动态库
肥储谷苏:1、总体说明: 实现一个函数,传入整形数i,返回值i*i,这个函数做在DLL中,java将通过JNI调用这个函数,传入一个参数,得到返回值. 确定DLL的名称为calldll.dll,函数shanfei(int i). 2、编写java程序javacall.java,如下: public class ...

香坊区19878638650: 如何使用ajax调用java类 -
肥储谷苏: ajax调用java后台的方法,其实是通过url链接来访问,示例如下:package com.xxxx.xxxx.servlet; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网