image.png
該項目打包成ajar.jar
AbsCore.java
package package_a;
public abstract class AbsCore {
public String methodA() {
return "methodA";
}
public String methodB() {
return "methodB";
}
}
C.java
package package_a;
public class C extends AbsCore {
}
D.java
package package_a;
public class D extends AbsCore {
@Override
public String methodA() {
return "DA";
}
@Override
public String methodB() {
return "DB";
}
}
ICore.java
package package_a;
public interface ICore {
public String test();
}
AImpl.java
package package_a;
public class AImpl implements ICore {
private String name = "A";
public String test() {
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
BImpl.java
package package_a;
public class BImpl implements ICore {
public String test() {
return "B";
}
}
image.png
該項目打包成bjar.jar
Test.java
package package_b;
import package_a.*;
public class Test {
public static String testStatic() {// 測試靜態(tài)方法
return "testStatic success.";
}
public void testVoid() {// 測試Void方法
System.out.println("testVoid success.");
}
public String testString() {// 測試返回String的方法
return "testString success.";
}
public String testString(String str) { //測試重載的方法
return str;
}
public String testICore(ICore core) { //測試傳入java實例酥宴,以接口類型入?yún)? return core.test();
}
public String testAbsCore(AbsCore core) { //測試傳入java實例螟加, 以抽象類型入?yún)? return core.methodA();
}
public ICore testICore() { //測試返回接口類型的java實例
AImpl a = new AImpl();
a.setName("hello");
return a;
}
public AbsCore testAbsCore() { //測試返回抽象類型的java實例
D d = new D();
return d;
}
}
image.png
bjar.jar放在本目錄珠洗,ajar.jar放在其他目錄似将,模擬依賴問題壳坪。
usejar.py
# coding=utf-8
import jpype
import os
import platform
if __name__ == '__main__':
jvm_path = jpype.getDefaultJVMPath()
dependence_dirs = list()
dependence_dirs.append(os.path.join(os.path.abspath("."))) # 當前目錄柳刮,所要使用的jar則放在該目錄
dependence_dirs.append(r"/Users/apple/Desktop") # 被依賴的jar所在的目錄,被依賴的目錄可能由多個砚著,自行append即可
if platform.system() == "Windows": #處理分隔符號
java_dirs = ";".join(dependence_dirs)
else:
java_dirs = ":".join(dependence_dirs)
jpype.startJVM(jvm_path, "-ea", "-Djava.ext.dirs=%s" % java_dirs, convertStrings=True)
AbsCore = jpype.JClass("package_a.AbsCore")
AImpl = jpype.JClass("package_a.AImpl")
BImpl = jpype.JClass("package_a.BImpl")
C = jpype.JClass("package_a.C")
D = jpype.JClass("package_a.D")
ICore = jpype.JClass("package_a.ICore")
Test = jpype.JClass("package_b.Test")
test = Test()
print Test.testStatic() # 測試靜態(tài)方法
test.testVoid() # 測試Void方法
print test.testString() # 測試返回String的方法
print test.testString("aaaaaa") # 測試重載的方法
print test.testICore(AImpl()) # 測試java實例入?yún)? print test.testICore(BImpl())
print test.testAbsCore(C()) #測試java實例入?yún)? print test.testAbsCore(D())
print test.testICore().test() #獲得java實例
print test.testAbsCore().methodB() #獲得java實例
jpype.shutdownJVM()
image.png
附上java的源碼,以及本人編譯后的jar茅撞。
鏈接:https://pan.baidu.com/s/11GQ2bm_DCm-Lz98x5GSB2w 密碼:0azg