Java创建BuffereImage冻结程序实例
我正在经历一些非常奇怪的事情,我根本不知道是什么原因造成的。这是有问题的代码行:Java创建BuffereImage冻结程序实例,java,multithreading,lwjgl,bufferedimage,freeze,Java,Multithreading,Lwjgl,Bufferedimage,Freeze,我正在经历一些非常奇怪的事情,我根本不知道是什么原因造成的。这是有问题的代码行: BufferedImage out = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB); 调用此函数后,所有线程都会冻结,所有内容都会停止。我试着把它放在自己的线程和主线程中,同样的事情发生了。我正在使用LWJGL3,所以这可能是一个问题,但我不知道它是怎么回事 编辑:在没有LWJGL输入或输出-XstartOnFirstThread的空白项目中不会
BufferedImage out = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
调用此函数后,所有线程都会冻结,所有内容都会停止。我试着把它放在自己的线程和主线程中,同样的事情发生了。我正在使用LWJGL3,所以这可能是一个问题,但我不知道它是怎么回事
编辑:在没有LWJGL输入或输出-XstartOnFirstThread的空白项目中不会出现此错误!我找到了解决办法。事实证明,所需要的只是以下JVM参数:
-Djava.awt.headless=true
您还必须确保您没有在主线程中运行它,您必须在初始化GLFW的线程之外运行它
所有这些仅适用于在Mac、Linux和Windows上运行LWJGL而没有此问题的情况。您如何知道程序停止的地方?你用调试器检查过每个线程的调用堆栈吗?@Radiodef我没有检查过任何调用堆栈,但我有以下代码要调试:
System.out.println(“Before”)
BufferedImage out=新的BufferedImage(256,256,BufferedImage.TYPE\u INT\u RGB)代码>System.out.println(“之后”)代码>我只在控制台中看到“Before”。接下来,我要做的是使用调试器检查每个线程的调用堆栈,以验证它们确实已冻结以及它们都在哪里。@Radiodef似乎ColorModel.loadLibraries
是线程停止的地方。在该方法内部,调用了java.security.AccessController.doPrivileged
。编辑:我甚至尝试创建另一个线程来反复将内存使用情况打印到控制台中,但即使该线程也会锁定。在一个简单的main方法中实例化BuffereImage,而无需添加lwjgl和其他库来构建路径。它自己工作吗?