Python3:如何从python运行java类文件

2024-10-01 15:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我从这个链接中阅读了JPype文档:http://jpype.readthedocs.io/en/latest/,但我不确定是否可以使用JPype,或者选择另一种方式从python3运行java类。另外,我必须指出,我对使用JPype有点困惑。 我这样做了:

    import urllib.request
    import os
    import tempfile
    import sys
    import fileinput
    import logging
    import JPype as jp



# here i have python code and do something else
"""
        my python code



"""

#from this point till end of the code i did for my question



    logging.basicConfig(filename="ERROR.txt", level= logging.ERROR)
    try:
        logging.debug('we are in the main try loop')

        jp.startJVM("C:/Users/user/AppData/Local/Programs/Python/Python36/ClassWithTest.java", "-ea")
        test_class = jp.JClass("ClassWithTest")
        a = testAll()
        file_java_class = open("OUTPUT.txt", "w")
        file_java_class.write(a)
    except Exception as e1:
            logging.error(str(e1))
            jp.shutdownJVM()
  • 但它有问题,并向我显示了一个错误:7,inimport jpype as jp ModuleNotFoundError:没有名为“jpype”的模块

=================================================================================

  • 我必须指出,我的java类在python路径和java中 课程是:
 public class ClassWithTest{
        public ClassWithTest(){
      /* Va invocato */
      System.out.println(insertLength("Tests ready to run"));
        }

        public void testAbs(){
      /* Va invocato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.println(insertLength("abs(-2) = 2: " + testResult(Math.abs(-2), 2)));
      System.out.println(insertLength("abs(-3) = -2: " + testResult(Math.abs(-3), -2)));
        }

        public void testRound(){
      /* Va invocato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.println(insertLength("round(0.7) = 1: " + testResult(Math.round(0.7), 1)));
      System.out.println(insertLength("round(0.2) = 1: " + testResult(Math.round(0.2), 1)));
        }

        public void testMin(){
      /* Va invocato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.println(insertLength("min(7,3) = 3: " + testResult(Math.min(7,3), 3)));
      System.out.println(insertLength("min(5,7) = 7: " + testResult(Math.min(5,7), 7)));
        }

        public void testMax(){
      /* Va invocato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.println(insertLength("max(7,14) = 14: " + testResult(Math.max(7,14), 14)));
      System.out.println(insertLength("max(5,7) = 5: " + testResult(Math.max(5,7), 5)));
        }

        public void TestDiv(){
      /* Non andreabbe chiamato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.println(insertLength("14 / 2 = 7: " + testResult(14 / 7, 3)));
      //  assert(14 / 0 == 10));
        }

        public void testMult(int x){
      /* Non andreabbe chiamato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.printf("2 * %d = %s:", x, testResult(2 * x, 2 * x)));
      //       assert(false));
        }

        public void otherTest(){
      /* Non andreabbe chiamato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      System.out.printf("1 = 1:", testResult(1, 1)));
      //       assert(false));
        }

        private void testAll(){
      /* Non dovrebbe essere chiamato */
      System.out.println(insertLength("Invocation of " + Thread.currentThread().getStackTrace()[1].getMethodName()));
      testAbs());
      testRound());
      testMin());
      testMax());
        }

        private static String testResult(double result, double expected){
      return (result == expected ? "ok" : "no"));
        }

    public static String insertLength(Object obj){
        String line = obj.toString());
        return String.format("[%d]> %s", line.length(), line));
    }

        public static void main(String[] args){
      (new ClassWithTest()).testAll());
        }
    }

  1. 我不知道为什么这样不行?!!我读过jython,但我不能用 jython,因为我不太明白。你能帮我:
  2. 1-如何从python运行java类2-保存输出 在文本文件3中执行-将可能的错误消息保存在 另一个文本文件,然后终止。谢谢你

Tags: ofmathjavapublicoutsystemthreadprintln
1条回答
网友
1楼 · 发布于 2024-10-01 15:32:46

我通常用JYthon。在Jython应用程序中使用Java就像在Jython脚本中使用外部Jython模块一样无缝。在

下面是一个简单的例子:

from java.lang import Math

Math.max(4, 7)

Math.pow(10,5)

from java.lang import System as javasystem
javasystem.out.println("Hello")
Hello

相关问题 更多 >

    热门问题