首先是在anaconda中進入我這個項目對應的一個環境,而後在這個環境中下載而且安裝jpype。那麼就能夠直接import了。可是這裏出現了一系列的問題
第一個問題,getDefaultJVM()報錯,報的錯是找不到默認的JVM,提示我配置好JAVA_HOME
在配置好JAVA_HOME以後,再次試了一下,就仍是提示了一下找不到JVM,讓我繼續配置JAVA_HOME,這裏我重啓了一下pycharm,而後提示了我下一個問題
第二個問題,python是64位的而我jvm是32位的
我剛開始還不信,因而在網上查了一下,cmd中java -version若是版本中有出現64-bit的字樣,那麼就說明是64位的,反之則沒有,我試了一下,個人果真沒有64位字樣,說明個人是32位的。接下來就是重裝java,記得要首先在環境變量中將咱們以前配置的環境變量刪除,這個時候能夠用個文本文件保存一下,等會兒重裝的時候還要配置。刪除了環境變量以後再用軟件管家卸載java,這裏有兩個東西,都卸載掉。而後到官網下載,官網上找到windows,有x86和x64的,x86是32位的,下載x64位的JDK,記住必定是安裝JDK而不是JRE。安裝以後配置一下環境變量,配置以後若是在cmd中輸入java -version 和javac都出現提示信息說明配置成功。這一個問題算是解決了,下一個問題。
我測試了一下我打包的項目文件,我用JClass()去找其中的一個類,提示我沒有這個類
這個時候我去找了一下不少博客,都不是我這個問題,還有的人說我這個版本不行,說什麼jpype不支持jdk1.6以上的,我差點就要放棄了,由於我不會爲了這個版本而丟棄1.8,這太蠢了吧。可是後來我嘗試了一下用別人的步驟先搭了一個簡單的包,並且用cmd javac編譯了一個類,而且用jar cvf myjar.jar com打包了這個項目,在python中找到了相應的類,是個JClass類,並且併成功實例化了該類。若是cmd不編譯該類,則不能實例化。後面嘗試了用IDEA打包,也是能夠實例化並執行的。因此問題又來了
如何用IDEA打包我本身的項目代碼?
以前提到用JClass去找類的時候提示沒有找到這個類,我以爲很奇怪,因而先解壓個人jar包,發現它不是第一層目錄,裏面還有一些雜七雜八的東西,裏面還有一個jar包,再次解開這個jar包,才發現是我想要的東西。因而把他引入到個人python項目中,這下成功找到了那個類,並且能夠實例化併成功調用相關的方法。這裏有個小坑就是,在咱們建立artifacts的時候,若是從from mudule with dependencies這個方式建立,那麼會建立一個以前說到的那個裏面還有不少雜七雜八的東西的jar包,就是說,外層多了一層,而咱們實際須要的東西,在整個jar包內部的下一層。因此正確的作法是先建立一個empty的artifact,而後從中添加mudule output,這樣子就能夠了
這個時候我跑了一下個人項目,發現出現了中文亂碼
這個中文亂碼是在python調用java某個方法,而這個方法是輸出中文,的時候,出現的。
我覺得是編碼的問題,因此就把兩邊的file encoding都改爲了utf-8。可是調用的時候,仍是出現了亂碼。而若是用cmd執行jar包,是不會出現亂碼的,並且python控制檯直接輸出中文也是正常的,可是在python的控制檯用java的輸出,就會出錯。而若是java的方法返回一個字符串,在python這邊輸出,確是很正常的,這就說明。其實jar包並無亂碼的問題,有問題的是,jvm的輸出在python這邊的虛擬機上出現了亂碼,這裏猜想是更底層的實現細節,這裏沒有具體去深究。目前的解決方法就是,不在Java中進行輸出,統一在python中輸出。可是還有個問題
爲何java代碼是先輸出了以後纔是python輸出?明明部分python代碼在前面啊?還未搞清楚java