一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PyJNIus :讓你在Python中輕松調(diào)用Java方法

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-01 10:45 ? 次閱讀

PyJNIus 是一個(gè)神奇的 Python 第三方模塊。它能使用Java本地接口將Java類(lèi)作為Python類(lèi)訪問(wèn)的Python模塊。

如果你需要在Python中使用Java 類(lèi),這個(gè)第三方模塊是你最好的選擇。

1.準(zhǔn)備

開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。

請(qǐng)選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
  2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pyjnius

2.快速開(kāi)始

使用Jnius導(dǎo)入Java類(lèi)特別簡(jiǎn)單,你只需要引入 autoclass 并引用你所需要的類(lèi)即可:

>> > from jnius import autoclass
 >> > autoclass('java.lang.System').out.println('Hello world')
Hello world

 >> > Stack = autoclass('java.util.Stack')
 >> > stack = Stack()
 >> > stack.push('hello')
 >> > stack.push('world')
 >> > print(stack.pop())
world
 >> > print(stack.pop())
hello

當(dāng)你引入類(lèi)后,你只需要按 Java 的函數(shù)操作即可,如上述代碼中的 push 和 pop 函數(shù)。

最令人驚喜的是,你還能在安卓系統(tǒng)中利用這個(gè)模塊使用Python調(diào)用Java類(lèi):

from time import sleep
from jnius import autoclass

Hardware = autoclass('org.renpy.android.Hardware')
print('DPI is', Hardware.getDPI())

Hardware.accelerometerEnable(True)
for x in xrange(20):
    print(Hardware.accelerometerReading())
    sleep(.1)

輸出結(jié)果如下:

I/python  ( 5983): Android kivy bootstrap done. __name__ is __main__
I/python  ( 5983): Run user program, change dir and execute main.py
I/python  ( 5983): DPI is 160
I/python  ( 5983): [0.0, 0.0, 0.0]
I/python  ( 5983): [-0.0095768067985773087, 9.3852710723876953, 2.2218191623687744]
I/python  ( 5983): [-0.0095768067985773087, 9.3948478698730469, 2.2218191623687744]
I/python  ( 5983): [-0.0095768067985773087, 9.3948478698730469, 2.2026655673980713]
I/python  ( 5983): [-0.028730420395731926, 9.4044246673583984, 2.2122423648834229]
I/python  ( 5983): [-0.019153613597154617, 9.3852710723876953, 2.2026655673980713]
I/python  ( 5983): [-0.028730420395731926, 9.3852710723876953, 2.2122423648834229]
I/python  ( 5983): [-0.0095768067985773087, 9.3852710723876953, 2.1835119724273682]
I/python  ( 5983): [-0.0095768067985773087, 9.3756942749023438, 2.1835119724273682]
I/python  ( 5983): [0.019153613597154617, 9.3948478698730469, 2.2122423648834229]
I/python  ( 5983): [0.038307227194309235, 9.3852710723876953, 2.2218191623687744]
I/python  ( 5983): [-0.028730420395731926, 9.3948478698730469, 2.2026655673980713]
I/python  ( 5983): [-0.028730420395731926, 9.3852710723876953, 2.2122423648834229]
I/python  ( 5983): [-0.038307227194309235, 9.3756942749023438, 2.2026655673980713]
I/python  ( 5983): [0.3926490843296051, 9.3086557388305664, 1.3311761617660522]
I/python  ( 5983): [-0.10534487664699554, 9.4331550598144531, 2.1068975925445557]
I/python  ( 5983): [0.26815059781074524, 9.3469638824462891, 2.3463177680969238]
I/python  ( 5983): [-0.1149216815829277, 9.3852710723876953, 2.31758713722229]
I/python  ( 5983): [-0.038307227194309235, 9.41400146484375, 1.8674772977828979]
I/python  ( 5983): [0.13407529890537262, 9.4235782623291016, 2.2026655673980713]

為了能實(shí)現(xiàn)上述效果,你需要使用: python-for-android .

這是Android上Python應(yīng)用程序的打包工具。您可以創(chuàng)建自己的Python發(fā)行版(包括所需的模塊和依賴項(xiàng)),并將其與自己的代碼捆綁在APK中。

詳細(xì)教程可以見(jiàn)GitHub:
https://github.com/kivy/python-for-android

3.進(jìn)階使用

當(dāng)您使用 autoclass 時(shí),它將發(fā)現(xiàn)指定Java類(lèi)的所有方法和字段并對(duì)其進(jìn)行解析。如果你只想聲明和使用所需的內(nèi)容??梢赃@么弄:

from time import sleep
from jnius import MetaJavaClass, JavaClass, JavaMethod, JavaStaticMethod

class Hardware(JavaClass):
    __metaclass__ = MetaJavaClass
    __javaclass__ = 'org/renpy/android/Hardware'
    vibrate = JavaStaticMethod('(D)V')
    accelerometerEnable = JavaStaticMethod('(Z)V')
    accelerometerReading = JavaStaticMethod('()[F')
    getDPI = JavaStaticMethod('()I')

# 使用這個(gè)新類(lèi)
print('DPI is', Hardware.getDPI())

Hardware.accelerometerEnable()
for x in xrange(20):
    print(Hardware.accelerometerReading())
    sleep(.1)

這種形式支持你只引入你想要使用的類(lèi),不會(huì)造成資源浪費(fèi),代碼效率更高。

尤其是對(duì)于安卓系統(tǒng)有限的資源而言,推薦使用這種局部引入的方式。

當(dāng)然,如果你是桌面系統(tǒng)(windows, macOS),資源相對(duì)充足,使用autoclass引入的方式是可以接受的。

不過(guò),在Windows上,確保 JAVA_HOME 指向你的Java安裝路徑,以便 PyJNIus 可以找到 jvm.dll.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8885

    瀏覽量

    152990
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106524
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85875
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python調(diào)用Java擴(kuò)展包HanLP測(cè)試記錄

    、神經(jīng)網(wǎng)絡(luò)依存句法分析)。由于自己才疏學(xué)淺,對(duì)JAVA方面了解不多,所以打算在Python環(huán)%2, line 5, in <module>startJVM
    發(fā)表于 12-12 16:27

    Python的類(lèi)方法、實(shí)例方法和靜態(tài)方法?

    Python實(shí)例屬性和實(shí)例方法Python類(lèi)屬性和類(lèi)方法
    發(fā)表于 11-05 06:25

    后端選擇 java, 還是 python?

    限制。Java 語(yǔ)言在當(dāng)今所有語(yǔ)言里面的排名是第一位。而且市面上關(guān)于 Java 的招聘崗位也非常多。但是這并不代表學(xué)習(xí) Java 就一定好。首先從學(xué)習(xí)的難易程度來(lái)講 Java 就不如
    發(fā)表于 09-26 14:07

    C/C++調(diào)用Java不同類(lèi)的靜態(tài)方法有哪些

    C/C++調(diào)用Java不同類(lèi)的靜態(tài)方法有哪些?C/C++調(diào)用
    發(fā)表于 09-30 08:12

    如何用java映射創(chuàng)建java對(duì)象和調(diào)用java對(duì)象呢

    java是一種解析語(yǔ)言,java程序是通過(guò)java虛擬機(jī)解析.class的方式運(yùn)行起來(lái)。因此,java中就存在java映射的概念。下面介紹如
    發(fā)表于 04-11 14:43

    如何用java映射創(chuàng)建java對(duì)象和調(diào)用java對(duì)象的方法

    java是一種解析語(yǔ)言,java程序是通過(guò)java虛擬機(jī)解析.class的方式運(yùn)行起來(lái)。因此,java中就存在java映射的概念。一、首先我
    發(fā)表于 07-28 16:11

    JNI java調(diào)用so動(dòng)態(tài)庫(kù)方法

    JNI Java調(diào)用so包相關(guān)問(wèn)題總結(jié),出現(xiàn)了很多問(wèn)題,按照操作應(yīng)該不會(huì)發(fā)生不到so包的錯(cuò)誤,其實(shí)最后出現(xiàn)的也是說(shuō)加載不到libpython2.7.x.so.1,我就納悶了,怎么和python扯上
    發(fā)表于 11-28 13:13 ?3622次閱讀

    Java方法調(diào)用Lua function

    Java先載入login.lua腳本并編譯,然后再獲取指定名稱的函數(shù),無(wú)參的直接使用call()方法調(diào)用,帶參的需要通過(guò)invoke(LuaValue[])傳入?yún)?shù)表。
    的頭像 發(fā)表于 09-07 10:47 ?1579次閱讀

    Java如何判斷字符相等

    Python判斷字符相等與判斷數(shù)字類(lèi)型時(shí)所用的方法相同都是使用”==”來(lái)進(jìn)行判定,在Java當(dāng)我們
    的頭像 發(fā)表于 02-24 10:41 ?906次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>中</b>如何判斷字符相等

    Python調(diào)試工具-Birdseye

    Birdseye是一個(gè)Python調(diào)試器,它在函數(shù)調(diào)用記錄表達(dá)式的值,并讓你在函數(shù)**退出**后輕松查看它們
    的頭像 發(fā)表于 02-24 10:55 ?852次閱讀
    <b class='flag-5'>Python</b>調(diào)試工具-Birdseye

    Python輕松調(diào)用Java方法-PyJNIus

    PyJNIus 是一個(gè)神奇的 Python 第三方模塊。它能使用Java本地接口將Java類(lèi)作為Python類(lèi)訪問(wèn)的
    的頭像 發(fā)表于 02-24 13:49 ?1900次閱讀

    Python環(huán)境搭建和LabVIEW調(diào)用

    本文主要介紹Python相關(guān)的環(huán)境搭建、Anaconda的使用以及在LabVIEW調(diào)用Python方法。
    的頭像 發(fā)表于 10-13 17:56 ?4393次閱讀
    <b class='flag-5'>Python</b>環(huán)境搭建和LabVIEW<b class='flag-5'>中</b>的<b class='flag-5'>調(diào)用</b>

    PyJNIus:在Python輕松調(diào)用Java方法

    PyJNIus 是一個(gè)神奇的 Python 第三方模塊。它能使用Java本地接口將Java類(lèi)作為Python類(lèi)訪問(wèn)的
    的頭像 發(fā)表于 10-30 11:32 ?1233次閱讀

    shell調(diào)用java并返回執(zhí)行結(jié)果

    在Shell腳本調(diào)用Java程序并獲取執(zhí)行結(jié)果,可以通過(guò)以下步驟實(shí)現(xiàn): 編寫(xiě)Java程序:首先,你需要編寫(xiě)一個(gè)Java程序,包含你想要執(zhí)行
    的頭像 發(fā)表于 11-08 10:32 ?2064次閱讀

    python調(diào)用math函數(shù)的方法

    。本文將詳細(xì)介紹math模塊的各種數(shù)學(xué)函數(shù)的調(diào)用方法,包括函數(shù)的功能、參數(shù)的使用和返回值的含義等方面,以幫助讀者更好地理解和應(yīng)用這些函數(shù)。 一、導(dǎo)入math模塊 要使用math模塊
    的頭像 發(fā)表于 11-22 11:01 ?3524次閱讀