绿化版Java11的环境配置与Python调用Java

绿化Java环境的安装与配置

安装JDK

Oracle的官网下载:

image-20210630154207941

官方最新版本是16,个人选择下载11版本的zip压缩包:jdk-11.0.6_windows-x64_bin.zip

网盘下载地址:

链接:https://pan.baidu.com/s/16vNLcOVd5LfTRoAnneL2ww
提取码:6uke

我解压到了D:\deploy目录下:

image-20210630155208637

设置环境变量

然后需要将该目录添加JAVA_HOME环境变量中。官方的说明是:

image-20210630155459743

大致操作:

image-20210630155813636

image-20210630160050725

然后将%JAVA_HOME%\bin添加到path环境变量中:

image-20210630160313854

注意:添加到用户的Path环境变量和系统的Path环境变量都可以,区别在于当前用户生效还是当前电脑所有用户都生效。

JAVA_HOMEbin目录添加到PATH中是为了在任意文件夹下都可以运行java

至此Java已经安装完毕,下面我们验证一下安装是否成功:

验证安装

打开命令行,输入如下命令,如果安装成功,会看到如下输出:

Microsoft Windows [版本 10.0.18363.418]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\ASUS>java -version
java version "11.0.5" 2019-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)

C:\Users\ASUS>

如果你看到的版本号不是16,而是151.8之类,说明系统存在多个JDK,且默认JDK不是JDK 16,需要把JDK 16提到PATH前面。

JDK中的可执行文件

JAVA_HOMEbin目录下有很多可执行文件,常用的有:

  • java:用于启动JVM执行指定的编译后的代码;
  • javaw:也用于启动JVM执行指定的编译后的代码,但无控制台窗口;
  • javac:用于把Java源码文件(.java后缀)编译为Java字节码文件(.class后缀);
  • jar:用于把一组.class文件打包成一个.jar文件;
  • javadoc:用于从Java源码中自动提取注释并生成文档;
  • jdb:Java调试器,用于开发阶段的运行调试。

配置双击直接执行Jar程序

在没有配置前,我们需要通过java -jar xxx.jar命令来启动程序:

image-20210630165846000

现在我们希望以后能直接双击打开。

首先,随便找个jar文件右键单击点打开方式–>默认打开方式,点预览,选择%JAVA_HOME%\bin下的javaw.exe文件点确定,让注册表中先生成相应的项和值:

image-20210630172121817

然后修改刚才生成的注册表项(regedit命令打开注册表):

修改HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command的默认值:

由
"D:\deploy\jdk-11.0.5\bin\javaw.exe" "%1"
改为
"D:\deploy\jdk-11.0.5\bin\javaw.exe" -jar "%1"

image-20210630172621848

将jar包文件属性改成如下形式:

image-20210630173315150

再次双击Jar包就打开了程序:

image-20210630173351842

Python调用Java

首先安装JPype:

pip install jpype1

直接调用Java的函数

在IDE工具中执行以下代码:

__author__ = "小小明"

from jpype import *

if __name__ == "__main__":
    # 启动java虚拟机
    jvm_path = getDefaultJVMPath()
    print(jvm_path)
    startJVM(jvm_path, "-ea")
    # 调用println函数
    java.lang.System.out.println("hello world,hello python,hello java")
    # 关闭虚拟机
    shutdownJVM()

结果:

D:\deploy\jdk-11.0.5\bin\server\jvm.dll
hello world,hello python,hello java

执行现成的可执行Jar包

比如我们执行前面提到的jar包:

__author__ = "小小明"

from jpype import JClass
from jpype import startJVM, getDefaultJVMPath, shutdownJVM

if __name__ == "__main__":
    # 启动java虚拟机
    # 注意使用了-D选项指定了jar的目标位置
    startJVM(getDefaultJVMPath(), "-ea",
             "-Djava.class.path=E:/tmp/jfreechart-1.0.13-demo.jar")
    # 加载自定义的java class
    SuperDemo = JClass("demo.SuperDemo")
    SuperDemo.main([])
    # 关闭虚拟机
    shutdownJVM()

再IDE中执行后已经顺利的运行Java桌面程序。

调用自己编写的Java类

创建Java文件JPypeDemo.Java内容如下:

public class JPypeDemo{
    public String say(String user){
        return "[小小明]说: " + user;
    }

    public int calc(int a, int b){
        return a + b;
    }
}

编译Java源代码:

javac JPypeDemo.java -encoding UTF-8

注意:encoding参数指定你的Java源码实际保存的编码

打包成jar文件:

jar cvf JPypeDemo.jar JPypeDemo.class

编译和打包好的文件:

image-20210630234641195

然后我们可以在Python中调用:

__author__ = "小小明"

from jpype import JClass, java
from jpype import startJVM, getDefaultJVMPath, shutdownJVM

import os

if __name__ == "__main__":
    # 启动java虚拟机
    # 注意使用了-D选项指定了jar的目标位置
    startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=./JPypeDemo.jar")
    # 加载自定义的java class
    JDClass = JClass("JPypeDemo")
    jd = JDClass()

    # 获取java标准库打印函数
    jprint = java.lang.System.out.println
    # 调用自定义class中的函数,并输出返回值
    jprint(jd.say("你好!"))

    jprint(jd.calc(5, 4))

    # 关闭虚拟机
    shutdownJVM()

结果:

[СС��]˵: ��ã�
9

在Pycharm执行出现乱码。但在本地命令行窗口执行一切正常,结果:

[小小明]说: 你好!
9

官方手册

http://jpype.readthedocs.io/en/latest/userguide.html#

  • 129
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 66
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 66
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小明-代码实体

喜欢,就关注;爱,就打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值