บทความนี้อธิบายวิธีการเรียกสคริปต์ Python ในโปรแกรม Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ในการพัฒนาโปรแกรมบางครั้งคุณต้องโทรหาสคริปต์ Python ที่เกี่ยวข้องในโปรแกรม Java เนื้อหาต่อไปนี้บันทึกขั้นตอนในการเริ่มต้นและแก้ไขปัญหาที่เป็นไปได้
1. สร้างโครงการ Maven ใหม่ใน Eclipse;
2. หลังจากเพิ่มแพ็คเกจการพึ่งพาต่อไปนี้ลงในไฟล์ pom.xml ให้อัปเดตโครงการ Maven;
<การพึ่งพา> <roupId> org.python </groupId> <ratifactid> Jython </artifactid> <sersion> 2.7.0 </เวอร์ชัน> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.python </groupid> <ratifactid> Jython-Standalone
3. เขียนรหัสทดสอบต่อไปนี้
นำเข้า org.python.util.pythoninterpreter; คลาสสาธารณะ JPythonscript {โมฆะคงที่สาธารณะหลัก (สตริง args []) {pythoninterpreter interpreter = new PythonInterpreter (); Interpreter.exec ("Days = ('mod', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');"); interpreter.exec ("วันพิมพ์ [1];"); -4. ทดสอบ:
เกิดข้อผิดพลาดต่อไปนี้:
คอนโซล: ไม่สามารถติดตั้ง '': java.nio.charset.unsupportedCharsetexception: CP0
ข้อยกเว้นในเธรด "หลัก" ผู้นำเข้า: ไม่สามารถนำเข้าโมดูลไซต์และการพึ่งพาได้: ไม่มีโมดูลชื่อไซต์
ตรวจสอบว่าแอตทริบิวต์ต่อไปนี้ถูกต้อง:
* sys.path: ['... python // jython // 2.7.0 // lib', '__classpath__', '__pyclasspath __/']
แอตทริบิวต์นี้อาจรวมถึงไดเรกทอรีที่ไม่ถูกต้องเช่นจาก cpython
*sys.prefix: ***/jython/2.7.0
แอตทริบิวต์นี้ถูกตั้งค่าโดยคุณสมบัติของระบบ python.home แม้ว่ามันจะสามารถทำได้
มักจะถูกกำหนดโดยอัตโนมัติโดยตำแหน่งของไฟล์ Jython Jar
คุณสามารถใช้ตัวเลือก -s หรือ python.import.site = false เพื่อไม่นำเข้าโมดูลไซต์
5. การแก้ปัญหา:
รหัส refactoring มีดังนี้:
นำเข้า java.util.properties; นำเข้า org.python.util.pythoninterpreter; คลาสสาธารณะ jpythonscript {โมฆะคงที่สาธารณะหลัก (สตริง args []) {properties props = คุณสมบัติใหม่ (); props.put ("python.home", "เส้นทางไปยังโฟลเดอร์ lib"); props.put ("python.console.encoding", "UTF-8"); props.put ("python.security.respectjavaaccessibility", "false"); props.put ("python.import.site", "false"); คุณสมบัติ preprops = system.getProperties (); Pythoninterpreter.initialize (preprops, อุปกรณ์ประกอบฉาก, สตริงใหม่ [0]); PythonInterpreter Interpreter = new PythonInterpreter (); Interpreter.exec ("Days = ('mod', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');"); interpreter.exec ("วันพิมพ์ [1];"); -6. การรวบรวมประสบความสำเร็จ
7. การอ้างอิงสำหรับการแก้ปัญหา:
http://bugs.jython.org/issue2355
อาหารเสริม: การแก้ปัญหาการโยนข้อผิดพลาดของ JPython ไม่สามารถนำเข้าโมดูลไซต์ได้
ข้อยกเว้นในเธรด "หลัก" ผู้นำเข้า: ไม่สามารถนำเข้าโมดูลไซต์และการพึ่งพาได้: ไม่มีโมดูลชื่อไซต์
คลาสสาธารณะ jpythonscript {โมฆะคงที่สาธารณะหลัก (String args []) {properties props = คุณสมบัติใหม่ (); props.put ("python.import.site", "false"); คุณสมบัติ preprops = system.getProperties (); Pythoninterpreter.initialize (preprops, อุปกรณ์ประกอบฉาก, สตริงใหม่ [0]); PythonInterpreter Interpreter = new PythonInterpreter (); Interpreter.exec ("Days = ('mod', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');"); interpreter.exec ("วันพิมพ์ [1];"); - // ทำแผนที่การประมวลผลการยอมรับคลาสที่ซับซ้อน <String, Object> res = new hashmap <string, object> (); res.put ("1", "danny"); res.put ("2", "fanny"); pythoninterpreter interpm = new pythoninterpreter (); (pyfunction) interpm.get ("หลัก", pyfunction.class); แผนที่ <pyobject, pyobject> tablem = hashmap ใหม่ <pyobject, pyobject> (); tablem.put (pystring ใหม่ ("conf")สำหรับเนื้อหาที่เกี่ยวข้องกับ Java เพิ่มเติมผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินการ Java Dom Node", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน