<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4810字,需瀏覽 10分鐘

           ·

          2021-03-29 02:27

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

          如果你需要在Python中使用Java 類,這個(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類特別簡(jiǎn)單,你只需要引入 autoclass 并引用你所需要的類即可:

          >>> 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)你引入類后,你只需要按 Java 的函數(shù)操作即可,如上述代碼中的 push 和 pop 函數(shù)。

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

          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類的所有方法和字段并對(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è)新類
          print('DPI is', Hardware.getDPI())

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


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

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

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

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

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請(qǐng)持續(xù)關(guān)注Python實(shí)用寶典。

          有任何問(wèn)題,可以在公眾號(hào)后臺(tái)回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問(wèn)。

          原創(chuàng)不易,希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗(yàn)

          Python實(shí)用寶典 (pythondict.com)
          不只是一個(gè)寶典
          歡迎關(guān)注公眾號(hào):Python實(shí)用寶典

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  18禁福利网站 | 国产精品永久在线 | 韩国无码专区 | 久久九九免费视频 | 国产黄色电影在线观看 |