侧边栏壁纸
博主头像
极客手札博主等级

Do everything!

  • 累计撰写 31 篇文章
  • 累计创建 16 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

bug

BUG

共享文件问题

在使用java实现生成验证码时,出现

java.lang.UnsatisfiedLinkError: /opt/zulu21.32.17-ca-jdk21.0.2-linux_x64/lib/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or directory
java.lang.UnsatisfiedLinkError: /opt/zulu21.32.17-ca-jdk21.0.2-linux_x64/lib/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

等共享文件问题,在java运行jar包时加入-Djava.awt.headless=true参数就可以解决!

  • 参数说明:

-Djava.awt.headless=true 是Java虚拟机(JVM)参数,用于在没有图形界面的环境下运行Java应用程序。在headless模式下,Java AWT(Abstract Window Toolkit)和Java Swing不会尝试创建本地窗口或图形界面组件,而是将所有图形操作转换为非图形的形式,使得Java应用程序可以在服务器或嵌入式系统等没有图形环境的环境下运行。

字体问题

java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration

在 Linux 系统中,字体文件通常存储在特定的目录中,字体文件位于以下几个常见的目录中之一:

  1. /usr/share/fonts: 这是一个常见的字体文件存放目录,系统安装的字体通常会存储在这里。您可以在此目录下找到系统自带的字体和其他安装的字体。

  2. /usr/local/share/fonts: 一些自定义安装的字体可能会存储在此目录中。这是一个用于存放本地安装的字体文件的常见位置。

  3. /home/username/.fonts: 每个用户的个人字体目录通常位于用户的主目录下,名为 .fonts。用户可以在此目录下安装自己喜欢的字体。

  4. /etc/fonts: 这是系统中字体配置文件的存放目录。虽然不是存放字体文件的地方,但是在此目录下您可以找到与字体相关的配置文件,例如 fonts.conf

以上路径可能在不同的 Linux 发行版中有所不同。也可以通过以下方法之一来确定字体文件的存放位置:

  • 使用命令行工具(如 findlocate)搜索系统中的字体文件。
  • 查看图形用户界面中的字体管理工具,例如 GNOME 中的 Font Viewer。
  • 查看系统字体配置文件,如 /etc/fonts/fonts.conf,其中可能会指定字体文件的位置。

解决办法:添加字体文件,之后执行fc-cache -f -v刷新字体缓存,然后重启应用!

mybatis中parameterType

在使用mybatis时,如果只有一个参数,我们通常会在mapper中将 parameterType 设置为 String 或者Integer 等基本数据类型。如下:

@Mapper
public interface Test { 
    void testMethod(Integer type);
}

mapper中通过parameterType获取参数


<select id="testMethod" parameterType="Integer" resultType="com.xx.Test">
  SELECT * from test_table WHERE type = #{type}
    <if test="type == 1">
      AND status=2
    </if>
</select>

这样的xml配置会报错,报错内容如下

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'schoolId' in 'class java.lang.Integer'

主要原因是标签中通过getter方法取值,而Integer没有getter方法,所以会出现问题。而#{type}是可以取到值的!

解决办法一:

@Mapper
public interface Test { 
    void testMethod(@Param Integer type);
}

具体原理:(猜的)@Param会将参数转为map对象,使用参数名作为key,参数值作为value,这样在标签中调用getter方法时就能获取到了、

解决办法二:

<select id="testMethod" parameterType="integer" resultType="com.xx.Test">
  SELECT * from test_table WHERE type = #{type}
    <if test="_parameter == 1">
      AND status=2
    </if>
</select>

在这里,我看到别的文章中提到在parameter=String时,在 mapper.xml 中可以使用 #{aaa} 或者 #{bbb} 或任意值取值,在这实测,只能使用形参名进行取值,也就是必须是#{type},否则会报错:

Parameter 'aaa' not found. Available parameters are [type]

解决办法三:
将参数封装在map或者对象中传递

@Mapper
public interface Test { 
    void test(Map<String,Integer> map);
}

或者

@Mapper
public interface Test { 
    void testMethod(KeyValueBean  bean);
}

 
class KeyValueBean {
    
    private Integer type;
 
    //生成setter和getter方法
 
}
0

评论区