之前部署一个项目,在腾讯云主机上,是Ubuntu+OpenJDK1.9。项目在Windows下没问题,一部署到Linux上JVM就崩溃。后来根据日志跟踪到是CaptchaRender这个类中的问题。
protected void drawGraphic(String randomString, BufferedImage image){
...
g.setFont(RANDOM_FONT[random.nextInt(RANDOM_FONT.length)]);
...
}这段代码随机使用了一个字体数组,定义如下
protected static final Font[] RANDOM_FONT = new Font[] {
new Font("nyala", Font.BOLD, 38),
new Font("Arial", Font.BOLD, 32),
new Font("Bell MT", Font.BOLD, 32),
new Font("Credit valley", Font.BOLD, 34),
new Font("Impact", Font.BOLD, 32),
new Font(Font.MONOSPACED, Font.BOLD, 40)
};其中有字体在Linux下不存在。所以会有问题。我临时解决的办法是修改了CaptchaRender类,重新定义了一个MyCatchaRender类,添加数组
protected static final Font[] RANDOM_FONT_LINUX = new Font[]{
new Font(Font.MONOSPACED, Font.BOLD, 32),
new Font(Font.SANS_SERIF, Font.BOLD, 32),
new Font(Font.SERIF, Font.BOLD, 32)
};然后在drawGraphic方法中判断操作系统类型,如果是Windows则使用RANDOM_FONT数组,否则使用RANDOM_FONT_LINUX数组。
覆盖drawGraphic方法
protected void drawGraphic(String randomString, BufferedImage image){
...
//设定字体
if(StrUtil.containsAnyIgnoreCase(System.getProperty("os.name"),"windows")) {
g.setFont(RANDOM_FONT[random.nextInt(RANDOM_FONT.length)]);
}else{
g.setFont(RANDOM_FONT[random.nextInt(RANDOM_FONT_LINUX.length)]);
}...
}上面用了hutool库。不知道其他人有没有这个问题。
项目:JFinal
http://www.jfinal.com/share/411
此外,jfinal 3.4 已改进了这里,采用了更为通用的字体,jfinal 3.4 还差几天发布,你可以通过这个贴子的办法先用上:
http://www.jfinal.com/share/714