【发布时间】:2017-06-06 01:01:50
【问题描述】:
我遇到了一些非常奇怪的事情,我完全不知道是什么原因造成的。这是有问题的代码行:
BufferedImage out = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);
调用它时,所有线程都会冻结,一切都会停止。我试过把它放在它自己的线程和主线程中,同样的事情发生了。我正在使用 LWJGL3,所以这可能是个问题,但我不明白它是怎么回事。
编辑:在没有 LWJGL 进入或退出 -XstartOnFirstThread 的空白项目中不会发生
【问题讨论】:
-
你怎么知道程序停止的地方?你有没有用调试器检查过每个线程的调用栈?
-
@Radiodef 我没有检查任何调用堆栈,但我有这段代码要调试:
System.out.println("Before");BufferedImage out = new BufferedImage(256, 256, BufferedImage.TYPE_INT_RGB);System.out.println("After");我在控制台中只看到“之前”。 -
嗯,接下来我要做的是使用调试器检查每个线程的调用堆栈,以验证它们确实已冻结以及它们都在哪里。
-
@Radiodef 似乎
ColorModel.loadLibraries是线程刚刚停止的地方。在该方法内部,java.security.AccessController.doPrivileged被调用。编辑:我什至尝试创建另一个线程以反复将内存使用情况打印到控制台中,但即使该线程也锁定了。 -
在一个简单的 main 方法中实例化 BufferedImage,无需添加 lwjgl 和其他库来构建路径。它自己工作吗?
标签: java multithreading lwjgl bufferedimage freeze