python调用java代码 java虚拟机(jvm)

1、新建com文件夹,在里面新建 fibnq.java

package com;

public class fibnq {
    public fibnq(){}

    public int  fb(int n){
        if(n <2){
            return 1;
        }else {
            return fb(n-1)+fb(n-2);
        }
    }
}

2、在com文件夹路径打开cmd,编译fibnq.java

javac ./fibnq.java

3、返回上一层目录

cd ../

4、把fibnq类打包:注意   com要和fibnq.java的包名相同

jar cvf test.jar com

5、python调用:先安装   :pip install jpype1   自行百度安装

import time

from jpype import *
import os

if __name__ == ‘__main__‘:
    jdkPath = r"D:\Java1.8\jdk1.8.0_191\jre\bin\server\jvm.dll"

    #  注意一个重要的问题,导入包的时候路径不能有中文。
    jarpath = os.path.join(os.path.abspath(‘.‘), ‘test.jar‘)
    print(jarpath)
    startJVM(jdkPath,"-ea","-Djava.class.path=%s" % jarpath) #
    java.lang.System.out.println(" helloworld! ")
    fibnq = JClass(‘javaIoStream.fibnq‘)
    # 或者通过JPackage引用Test类
    # javaIoStream = JPackage(‘javaIoStream‘)
    # fibnq = javaIoStream.fibnq()
    st = time.time()
    for i in range(40):
        print(fibnq().fb(i))

    print(time.time()-st)
    shutdownJVM()

6、注意所有工作路径确保在英文路径下进行,出现中文路径会出现报错,各种bug。

  过程中我遇到个问题就是 版本不谦容问题,我使用   python3.6.5 需要安装  JPype1-0.6.3-cp36-cp36m-win_amd64.whl

  我之前安装过 jpype1-0.7.0 版本出现一个异常错误,目前找不到解决的方法,建议安装   jpype1-0.6.3

原文地址:https://www.cnblogs.com/wuzaipei/p/11161247.html

时间: 2024-08-28 18:06:29

python调用java代码 java虚拟机(jvm)的相关文章

python调用c代码

Linux环境下使用python调用C的printf例子: #!/usr/bin/env python2.7 #-*- coding:utf-8 -*- from ctypes import * def test(): #libc = cdll.LoadLibrary("libc.so.6") libc = CDLL("libc.so.6") msg = "hello world!\n" libc.printf("Testing:%s&

python调用c代码2

1.生成动态链接库 [[email protected] c]# more head.c #include <stdio.h> #include <stdlib.h> typedef struct _point{ int x; int y; }Point; Point * InitPoint(int x,int y) { Point *p = (Point *)malloc(sizeof(Point)); p->x = x; p->y = y; return p; }

python调用Go代码

Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main import "C" //export Sum func Sum(a, b int) int { return a + b } func main() {} 然后编译go build -buildmode=c-shared -o sum.so main.go,会得到一个sum.so和一个sum.

JAVA代码中获取JVM信息

一.JAVA中获取JVM的信息 原理,利用JavaSDK自带的ManagementFactory类来获取. 二.获取信息 1.获取进程ID @Test public void test1() { RuntimeMXBean mxb = ManagementFactory.getRuntimeMXBean(); System.out.println(mxb.getName()); //[email protected] } 2.获取ManagementFactory.getRuntimeMXBea

Java代码中获取JVM参数

参考:http://cn-done.iteye.com/blog/2041971 package com.wjz.demo; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.util.List; public class JVMArgs { public static void main(String[] args) { MemoryMXBea

python 调用js代码

Python2   安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 ctxt = PyV8.JSContext() ctxt.enter() # 创建一个jsContext对象并进入 ctxt.eval(js_str) # 执行js代码 接下来就可以使用这个ctxt来执行js脚本了.主要有两种用途: 1.调用js中的方法: #把strEnc绑定到js中的strEnc方

在Java中直接调用js代码(转载)

http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined.   package com.sinaapp.manjushri;  import javax.script.ScriptEngine;  import

从JVM的角度看JAVA代码--代码优化

从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Time)的介入,它会做进一步优化,这样就须要考虑是否可能被JIT优化. 片段一:反复计算 // 反复计算,这里b()被计算两次 Object a = b() == null ? "" : b(); // 优化代码 Object c = b(); Object a = c == null ? &

本地java代码和javascript进行交互(java和js互调)

在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互.android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机自动拨打电话,点击网页中的笑话,自动发送短信等. 废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本