问题:
最初是在Windows平台下部署图像项目时发现的,在一个Tomcat下单独部署视频识别项目正常,当在同一个webapps加入另一个项目后台同时运行时,第一个视频项目中的视频播放不了,报错java.lang.RuntimeException,该异常一直追溯到此处Caused by: java.awt.HeadlessException。查阅此类案例,发现不仅在服务器部署时有,在Spring boot环境下运行时或Linux下部署也有此类问题,因此总结一下。
情景1:Tomcat+Windows部署出现此类问题
java.lang.RuntimeException
Caused by: java.lang.ExceptionInInitializerError
Caused by: java.awt.HeadlessException
解决
修改Tomcat中的catalina.bat文件,编辑该文件并在最开头添加一行
set JAVA_OPTS=-Djava.awt.headless=false
重新启动Tomcat,运行即可解决该问题。解决思路是Tomcat运行时会把headless这个设置为true,然后java.awt包里函数调用时就会产生异常。
情景2:Tomcat+Linux部署出现此类问题
java.lang.RuntimeException: Failed to create component for 'frame' reason: java.awt.HeadlessException
at Pp$_run_closure1.doCall(Pp2.groovy:17)
at Pp.run(Pp2.groovy:15)
at Pp$run.call(Unknown Source)
at Pp.main(Pp2.groovy:12)
Caused by: java.awt.HeadlessException
解决
提高运行权限,可以先用管理员权限试试。
sudo groovy MyClass.groovy
情景3:Spring boot出现java.awt.HeadlessException的解决办法
java.awt.HeadlessException:null
解决
在入口类里修改成以下代码,其中YourApplication改成你的入口类的名字,
SpringApplicationBuilder builder = new SpringApplicationBuilder(YourApplication.class);
builder.headless(false).web(false).run(args);
并在虚拟机的VM Option里加上下面代码即可。
Djava.awt.headless=false