Skip to content

Python调用Java对Excel截图 | PyQt5 #27

Closed

Description

@892768447

https://pyqt5.com/calljava.html

如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。

Activity

  1. warlock-lv commented on Feb 2, 2021

    @warlock-lv

    emm这里不知道什么用绝对路径就报错

    libs = '{};{}'.format(
        'libs/bcprov-jdk16-146.jar',
        'libs/aspose-cells-19.2.jar'
    )
    

    你好,在win环境下试了你的代码,可以实现截图。但是我用了mac环境就出问题了,我在mac环境下 把jar包放在了 java_home下的 /lib文件夹下 还有jre/lib 文件夹下、也同时在/Library/Java/Extensions/下放了两个jar包,之所以在三个路径下放jar,是因为我不知道应该放在哪里。。。不管怎么样,代码运行了,没有报TypeError: Class com.aspose.cells.Workbook is not found。 但是代码运行到jpype.attachThreadToJVM() 此时console会出现如下warning
    DeprecationWarning: jpype._core.attachThreadToJVM is deprecated, use java.lang.Thread.attach instead
    jpype.attachThreadToJVM()
    此时程序并没有报错中断,但是会永久的卡在这里没有结果,不会中止。
    请问要怎么办?

  2. 892768447 commented on Feb 2, 2021

    @892768447
    MemberAuthor

    @warlock-lv
    加上print看看是不是 attachThreadToJVM 函数导致的,因为官方的这个jpype版本这个函数过时了。如果是这个问题。可以考虑降低它的版本

        # 解决多线程问题
        jpype.attachThreadToJVM()
        print('convertToImage')
  3. warlock-lv commented on Feb 3, 2021

    @warlock-lv
    def convertToImage():
         Workbook = jpype.JClass('com.aspose.cells.Workbook')
         print('1111111')
         ImageFormat = jpype.JClass('com.aspose.cells.ImageFormat')
         print('2222222')
         ImageOrPrintOptions = jpype.JClass( 'com.aspose.cells.ImageOrPrintOptions')
         SheetRender = jpype.JClass('com.aspose.cells.SheetRender')
         print('3333333')
         book = Workbook(os.path.abspath('/Users/xxx/Desktop/test_res/test.xlsx').replace('\\', '/'))
         # 保存为html
         print('444444')
    

    我降低了jpype1库的版本,的确那个warning不报了,但是 程序还是会卡住、运行不下去,我看了一下,它卡在了print('444444')上一行,这个会是什么问题呢

  4. 892768447 commented on Feb 3, 2021

    @892768447
    MemberAuthor

    @warlock-lv
    可能是分隔符导致的
    windows里是 ;
    linux/mac 里是 :
    这样试试

    libs = '{0}{1}{2}'.format(
        'libs/bcprov-jdk16-146.jar',
        os.pathsep,
        'libs/aspose-cells-19.2.jar'
    )
    
  5. warlock-lv commented on Feb 3, 2021

    @warlock-lv

    '-Xmx512M', '-Djava.class.path=libs/bcprov-jdk16-146.jar/libs/aspose-cells-19.2.jar')
    试了,还是卡住,这样拼出来的 command class.path 如上。

  6. 892768447 commented on Feb 3, 2021

    @892768447
    MemberAuthor

    '-Xmx512M', '-Djava.class.path=libs/bcprov-jdk16-146.jar/libs/aspose-cells-19.2.jar')
    试了,还是卡住,这样拼出来的 command class.path 如上。

    你这没对啊。中间不是应该有个冒号:
    -Djava.class.path=libs/bcprov-jdk16-146.jar : libs/aspose-cells-19.2.jar 类似这种。

  7. warlock-lv commented on Feb 3, 2021

    @warlock-lv

    '-Xmx512M', '-Djava.class.path=libs/bcprov-jdk16-146.jar:libs/aspose-cells-19.2.jar')
    哦,拼出来的这样。 也不行。

  8. 892768447 commented on Feb 3, 2021

    @892768447
    MemberAuthor

    @warlock-lv 程序是 cd 到 脚本目录了嘛?
    比如:

    /home/irony/Desktop/
        test.py
        libs/bcprov-jdk16-146.jar
        aspose-cells-19.2.jar
    

    cd /home/irony/Desktop/
    python3 test.py

    我目前是这样测试可以。如果还有问题那就不清楚是不是java的问题了

  9. warlock-lv commented on Feb 3, 2021

    @warlock-lv

    我在mac环境下 把jar包放在了 java_home下的 /lib文件夹下 还有jre/lib 文件夹下、也同时在/Library/Java/Extensions/下放了两个jar包,之所以在三个路径下放jar,是因为我不知道应该放在哪里。。。
    ……………………………………………………………………………………………………
    我突然想起来,你那边是mac环境吗 ? 如果是的话,你的jar 放在哪个路径下了?

  10. 892768447 commented on Feb 3, 2021

    @892768447
    MemberAuthor

    不对吧。我没有放到这几个目录。只需要在脚本同目录创建一个libs文件夹放进去@warlock-lv

  11. locked and limited conversation to collaborators on Oct 8, 2023
  12. converted this issue into a discussion #69 on Oct 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions