若依系统部署在linux系统 验证码报错:FontConfiguration.getVersion报空指针异常

news2024/11/17 4:33:12

最近遇到一个问题:若依前后端分离后端服务部署到linnux系统后访问/capthaImage 报空指针异常!
报错如下:
在这里插入图片描述
首先看问题sun.awt.FontConfiguration.getVersion();
这是jdk的问题啊!
首先查看linux系统的jdk信息

openjdk version "1.8.0_41"
OpenJDK Runtime Environment (build 1.8.0_41-b04)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)

这用的openjdk啊,我本地开发使用的是oraclejdk。

这里简单介绍下openjdk与oraclejdk区别

OpenJDKJava最早由SUN公司(Sun Microsystems,发起于美国斯坦福大学,SUN是Stanford University Network的缩写)发明,2006年SUN公司将Java开源,此时的JDK即为OpenJDK。OpenJDK是Java SE的开源实现,他由SUN和Java社区提供支持,2009年Oracle收购了Sun公司,自此Java的维护方之一的SUN也变成了Oracle。大多数JDK都是在OpenJDK的基础上编写实现的,比如IBM J9,Azul Zulu,Azul Zing和Oracle JDK。几乎现有的所有JDK都派生自OpenJDK,他们之间不同的是许可证,OpenJDK根据许可证GPL v2发布。Oracle JDK根据Oracle二进制代码许可协议获得许可。Oracle JDKOracle JDK之前被称为SUN JDK,显而易见,这是在2009年Oracle收购SUN公司之前,收购后被命名为Oracle JDK。实际上,Oracle JDK是基于OpenJDK源代码构建的,因此Oracle JDK和OpenJDK之间没有重大的技术差异。某次大会上,曾用下图证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的,两者共用了大量相同的代码,图中提示了两者共同代码的占比要远高于图形上看到的比例,所以我们编译的OpenJDK基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的,两者区别再粗暴些地说,OpenJDK是开源的,Oracle JDK是官方的,从网站就能看出一些端倪,OpenJDK界面如此粗糙(OpenJDK),朋友们可能从中看出了SUN的影子,
命令行中使用java -version,可以看到JDK的版本,如果是Oracle JDK,会显示,

[root@localhost ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

其中Java HotSpot™ 64-Bit Server VM表明,此JDK的JVM是Oracle的64位HotSpot虚拟机,运行在Server模式下。Java™ SE Runtime Environment (build 1.8.0_162-b12)是Java运行时环境(即JRE)的版本信息。如果是OpenJDK,会显示,

[root@localhost ~]# java -version
openjdk version "11-ea" 2018-09-25
OpenJDK Runtime Environment (build 11-ea+28)
OpenJDK 64-Bit Server VM (build 11-ea+28, mixed mode, sharing)

主要的Linux发行版(例如这些常见的Ubuntu、Fedora和Red Hat Enterprise Linux)提供OpenJDK或其变体作为系统默认的Java SE的实现。注意:使用yum install jdk安装成的是OpenJDK。
另外几点不同,授权协议的不同:

  1. OpenJDK采用GPL V2协议放出,而Oracle
    JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
  2. OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在OpenJDK中是找不到的。
  3. OpenJDK源代码不完整:这个很容易想到,在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码 将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。部分源代码用开源代码替换:由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。
  4. OpenJDK只包含最精简的JDK:OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP…,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。不能使用Java商标:这个很容易理解,在安装OpenJDK的机器上,输入“java -version”显示的是OpenJDK,但是如果是使用Icedtea补丁的OpenJDK,显示的是java。

解决问题

  1. 手动安装字体库
安装命令:yum install fontconfig
  1. 更换oraclejdk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库基础篇 《6. 多表查询》

目录 1. 一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 1.3 案例分析与问题解决 2. 多表查询分类讲解 分类1:等值连接 vs 非等值连接 等值连接 非等值连接 ​编辑 分类2:自连接 vs 非自连接 分类3&…

C语言从入门到精通第7天(scanf、printf、getchar函数的使用)

scanf、printf、getchar函数的使用 printf函数scanf函数getchar函数 printf函数 在C语言中使用printf函数进行格式化的输出,它是一个可变的参数函数,参数的个数不定。在前面我们已经学习了各个类型的打印格式,这里就对最常见的输出格式进行介…

如何在模拟器里面脱360的壳

1.准备环境 1.夜神模拟器 2.pyhton3.8 3.frida的版本 16.0.17 4.frida-dexdump 2.设置adb连接 我们打开夜神模拟器所在的文件夹,里面有自带的adb,我们在这个文件夹里面打开cmd。在里面链接上夜神模拟器。 adb devices 我这边显示链接成功了。 3.…

全平台数据(数据库)管理工具 DataCap 管理 Rainbond 上的所有数据库

DataCap是用于数据转换、集成和可视化的集成软件,支持多种数据源、文件类型、大数据相关数据库、关系数据库、NoSQL数据库等。通过该 DataCap 可以实现对多个数据源的管理,对数据源下的数据进行各种操作转换,制作数据图表,监控数据…

蓝牙耳机哪个牌子的音质好一些?三百内音质最好的蓝牙耳机排行

近几年,随着蓝牙耳机的普及,越来越多的人喜欢在追剧、运动以及听歌时戴蓝牙耳机。蓝牙耳机的性能越来越强大,使用也越来越方便。下面,我来给大家推荐几款三百内音质好的蓝牙耳机,可以当个参考。 一、南卡小音舱Lite2蓝…

Ext4日志优化-iJournaling

背景 这几年随着SSD等高性能介质的普及,及其在大规模分布式存储系统上的应用。基于Append only的日志写入技术也应用得越来越多,这几天刚好有空,重读了Ext4文件系统的日志部分的内容,也正好看到一篇对Ext4日志技术进行优化的论文…

Measuement Comuputing 公司USB-1608GX设备EPICS驱动的安装和调试记录

1、USB-1608GX模块简介 单端输入的管脚图 差分输入管脚图 USB-1608GX模块具有以下功能: 1) 16位模拟输入: 16路单端通道或者8路差分通道。每个通道可编程的范围:-1V-1V,-2V-2V,-5V-5V,-10V-10…

经典数据结构之2-3树

2-3树定义 2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率&#xff0c…

Mac AndroidStudio开发环境搭建

Mac AndroidStudio开发环境搭建 1.在Mac上配置环境变量 执行 open ~/.bash_profile (该文件是配置环境变量) 如果提示没有 执行 touch ~/.bash_profile 进行创建 打开文件之后 新增jdk和android sdk 参考蓝色部分需要替换对应内容 #jdk export JAVA_HOME/Library/J…

【100个 Unity实用技能】 | InputField输入框组件实现输入限制,只能输入中文或特殊字符等

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

tar: invalid option -- ‘z‘

在嵌入式开发过程中,出现tar命令无法识别到z选项,说明我们系统的tar命令版本太旧了,需要进行版本更新 下载地址 ftp://alpha.gnu.org/gnu/tar/ 这里选择下载 tar-1.27.1.tar.gz 我发现这个网址有时候会缺少一些版本,其他版本…

NeRFStudio系列 Part 1:PipeLines概述

前言:Why NeRFStudio? NeRF社区是近两年来计算机领域最活跃的学术社区之一,各种具有milestone意义的算法层出不穷,各位作者的开源工作也做得非常扎实,非常多的工作都自带了code、data、project page。 但是后继者想要在这些伟大的…

gpt3.5和gpt4区别-gpt3.5和gpt4

gpt系列 GPT系列是OpenAI公司开发的一组基于人工智能深度学习技术的自然语言处理模型。GPT代表Generative Pre-trained Transformer,即预训练生成模型。目前,GPT模型已经推出了三代(GPT-1,GPT-2,GPT-3)&am…

【Linux】虚拟机VMware中Centos7系统设置静态ip的详细步骤详解,看这一篇就够啦!

此篇主要讲解一下在VMware中创建centos7之后如何设置静态IP,有时候外部的连接工具要连接过来,需要稳定的一个ip地址,不然老是换ip,我们平时测试练习学习一些东西都会造成阻碍。接下来我使用设置if-ens33文件和nmtui命令的两种方式…

企业绩效管理怎么做?

阅读本文您将了解:1.企业绩效管理是什么;2.企业绩效管理怎么做;3.绩效管理系统的优势所在。 一、绩效管理是什么 绩效考核和绩效管理是企业管理中必须了解和掌握的概念。绩效考核是企业对主要经济和技术指标完成情况按照既定方案进行的考核…

密码安全性和数据合规性

企业有责任妥善存储和共享信息。过去的可怕事件,如雅虎的大规模数据泄露导致数百万用户的敏感信息被泄露,突显了为什么企业主如此担心其组织中的数据安全。 数据泄露不仅会使用户的隐私受到威胁,而且还会对公司的财务和声誉产生不可逆转的影…

​Laravel 使用 MinIO 作为文件存储​

起因 我们的图片资源和其他静态资源都采用 S3 来进行存储,于是我们为了降低代码复杂度,我们在开发和测试阶段用的存储页时线上 S3 环境,一直以来一切都正常运行着。但是突然有一天,在国内的测试服上传文件到 S3 出现了超时的问题…

Vue核心 模板语法 数据绑定

1.3.模板语法 Vue模板语法包括两大类 1.插值语法 功能:用于解析标签体内容 写法:{{xxx}},xxx 是 js 表达式,可以直接读取到 data 中的所有区域 2.指令语法 功能:用于解析标签(包括:标签属性…

Vue3+Typescript+Vitest单元测试+组件Props篇

上一节我们学习了如何测试组件内部的emit事件组件事件测试篇,这一节我们来测试一下组件的props 新增一个组件ZmTag 非常简单,就是可以接受三个参数,然后我们分别来测试三个参数传入的效果 import { defineComponent } from "vue"…

Python GUI设计——Python语言介绍

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 写在前面 本Python专栏主要讲解 PythonGUI设计 tkinter从入门到实践 系列,本…