Ubuntu 系统中 Java的图形出错报错 但是windows不报错 /java/jdk1.8.0_11/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: ca

Ubuntu 系统中 Java的图形出错报错 但是windows不报错 调用

报错信息 java.lang.UnsatisfiedLinkError: /java/jdk1.8.0_11/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

  在了解JVM类加载机制后在官方文档上竟然查到了能打印类加载日志的参数:-verbose:class 在jvm启动参数中加入这个参数即可以在控制台中查看类加载日志了, 控制台看到的日志内容如下: 

在这里加载了异常class 定位问题是在加载完java.awt.GraphicsEnvironment这个类后在初始化的时候报错。。看到这里必须了解类的加载。

JAVA类加载与初始化顺序:

类加载的双亲委派模型

各个加载器都是先委托自己的父加载器加载类,若确实没加载到再自己来加载

于是java默认的类查找加载顺序是自顶向下的,树状结构

双亲委托的意图是保证java类型体系中最基础的行为一致,优先加载JDK中的类

加载器主要有四种:

1.jvm启动类加载器bootstrap loader,用c++实现为jvm的一部分(仅指sun的hotspot),负责 JAVA_HOME/lib下面的类库中的类的加载,这个加载器,java程序无法引用到。

2.扩展类加载器Extension Loader,由sun.misc.Launcher$ExtClassLoader类实现,可在java中使用,负责JAVA_HOME/lib/ext 目录和java.ext.dir目录中类库的类的加载。

3.应用系统类加载器Application System Loader,由sun.misc.Louncher$AppClassLoader实现,负责加载用户类路径中类库中的类,如果没有使用自定义的加载器,这个就是默认的 加载器!

4.用户自定义加载器 自己定义从哪里加载类的二进制流

 

类初始化执行顺序:
 * 常量分 普通常量 和静态常量
 * 类描述: final 修饰的为常量 子类继承父类时的初始化顺序 
 * 1.首先初始化父类的static变量和块,按出现顺序
 * 2.初始化子类的static变量和块,按出现顺序 
 * 3.初始化父类的普通变量,调用父类的构造函数 
 * 4.初始化子类的普通变量,调用子类的构造函数

分析原来的问题是 缺少动态连接库.so--cannot open shared object file: No such file or directory 

解决办法是


#yum install libXp
#yum install libXt
#yum install libxtst

又出现下面的问题

java.awt.AWTError: Can't connect to X11 window server using 'localhost:12.0' as the value of the DISPLAY variable.

解决在

在/etc/profile中最后添加了 
 
export JAVA_OPTS=-Djava.awt.headless=true   更新配置 运行命令 source /etc/profile

不起作用 zai在jetty 的start.ini加上启动中加入java 参数

-Djava.awt.headless=true 

然后图片功能可以使用了。。。


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值