- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Jpype 将 java 类用于 python 脚本。java类涉及AWT库的使用:这似乎是问题所在。
这是 python 脚本:
import jpype
import os.path
import threading
jarpath = os.path.join(os.path.abspath('.'), 'build/jar')
target=jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.ext.dirs=%s" % jarpath)
Capture = jpype.JClass('Capture') # Capture is the class, contained in ./ folder
t = Capture(50,354,90,90,130,650,"num",36); # create the instance
jpype.shutdownJVM()
所以我只是想实例化这个类,然后退出。这是 java 类。我只报告导致错误的代码:
class Capture {
public Capture(int x, int y, int width, int height, int mouseNextX, int mouseNextY, final String fnamestart, final int countmax) {
//...
images = new ArrayList<BufferedImage>();
getImages(fnamestart,countmax); //THIS is the problem
}
// reference to getImages() method:
public void getImages(String fname, int countmax) {
images.clear();
for(int i=0; i<=countmax; i++) {
try {
BufferedImage img = ImageIO.read(new File(fname+i+".bmp"));
images.add(img);
} catch(IOException e) {
images.add(null);
}
}
}
}
此代码在运行 python 脚本时会引发以下错误:
jpype._jexception.VirtualMachineErrorPyRaisable: java.lang.InternalError: Can't start
the AWT because Java was started on the first thread. Make sure StartOnFirstThread is
not specified in your application's Info.plist or on the command line
长话短说,这是一个已知问题:Eclipse 有“它自己的版本”,然后就解决了。不幸的是,没有人谈到这个与 jpype 相关的问题。
我尝试了这些解决方案,但没有用:
在 python 脚本中,在启动 JVM 之前启动一个线程。然后在另一个线程中启动 JVM。
在 python 脚本中,使用参数 -XstartOnFirstThread
启动 JVM:
target=jpype.startJVM(jpype.getDefaultJVMPath(), "-XStartOnFirstThread -Djava.ext.dirs=%s" % jarpath)
在 java 代码中:使用 AWT 方法 invokeLater
,在构造函数中:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
images = new ArrayList<BufferedImage>();
getImages(fnamestart,countmax);
}
});
我真的不知道该怎么办,希望你能帮助我。谢谢,
乔瓦尼
最佳答案
使用这个参数:
jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.awt.headless=true')
关于java - Jpype: "Can' t 启动 AWT,因为 Java 是在第一个线程上启动的。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374211/
我正在使用 JayDeBeAPI在 PySpark(Apache Spark Python API)中,这是我的代码的开头(请注意,我实际上是通过 PySpark 的交互式 shell 运行所有这些代
我已经阅读并搜索了所有堆栈溢出..我还找到了JPype class not found但它并没有帮助我,虽然它已经解决了!我也有同样的问题 !我正在使用 Mac,python 2.7.6 我的 pyt
我找到了一些关于如何将用户构建的 .class 和 .jar 文件导入 JPype 的说明,但我似乎很难让任何东西正常工作。 有效方法:我可以导入标准的 java 内容并打印 HELLO WORLD
我在下面附上我的代码 from jpype import * from javax.swing import JFrame classpath = "-Djava.class.path=praat.j
我测试了一个简单的 hello world 行来测试 JPype: jpype.java.lang.System.out.println(" Hello World ") 它在“主”python 程序
除了 print 语句之外,还有其他方法可以检查 jpype 和 java 之间的连接吗?我已经在 anaconda(Windows 10 64 位、anaconda python27(64 位)和来
我有一个 python 代码,它通过 jpype 使用 java 库。目前,每次运行我的函数都会检查 JVM 是否存在,如果不存在则创建它 import jpype as jp def myfunc(
我有一个类似的代码 message = "abc".encode() messageDigest = java.security.MessageDigest.getInstance("SHA-256"
我们有用 Python 编写的软件,它使用 JPype 调用 Java,Java 执行各种资源繁重的计算/报告构建。我们最初在启动 JVM 时分配了 800mb 的堆空间。 Java 端是完全多线程的
我有一个java程序员,有以下行 service.loadPropertiesForItems(Inbox, new PropertySet(ItemSchema.Subject, ItemSchem
当我尝试使用 jpype 使用 stanford 解析器时,出现以下错误 文件“C:\Python26\lib\site-packages\stanford_parser\parser.py”,第 1
JPype 是一个了不起的项目,因为我允许直接从 Python 实例化一个 JVM。 不幸的是,我陷入了第一步。 我有 A.java 源代码(位于 C:\tmp 文件夹): class A {
我的代码: jarLocation = "C:/Users/LahiruGunawardhana/Desktop/New folder/info/infodynamics.jar" # Start t
我有一个 java 外观类,我试图从 python 访问,所以我决定使用 JPype。我的外观类只有一个构造函数(无默认值)和四个参数 public facade(String a, String b
我正在尝试使用 JPype 从 Python 调用 Apache Pdfbox,但实际上在导入这些类时遇到了一些困难。它似乎无法从类路径中的 jar 文件中读取它们。 from jpype impor
我正在开发一个客户端 - 服务器软件,其中服务器由 python 开发。我想从python中的java程序调用一组方法。所有 java 方法都存在于一个 jar 文件中。这意味着我不需要加载不同的 j
我从 https://github.com/Netflix/photon 构建了 Netflix Photon docker 镜像它的工作原理就像我能够启动容器并运行提供的 java 应用程序一样。
是否存在可在 NumPy 之间进行转换的库或脚本和 JPype数组? 最佳答案 没有 JArray(float, 1)(numpyarray) 工作? 至少 JArray(float, 1)(nump
我正在尝试在 JPype 中实例化 Properties 对象,但遇到了一些困难。下面的命令... props = JClass('java.util.Properties') props.setPr
我使用 JPype 是为了在 python 中使用 java 类。我有一个文件夹,其中包含多个自写的 .jar 文件。 我知道如何长期导入多个 .jar: ... CLASSPATH = "/path
我是一名优秀的程序员,十分优秀!