Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics2D drawString在Java 6之后生成无意义字符_Java_Graphics2d - Fatal编程技术网

Graphics2D drawString在Java 6之后生成无意义字符

Graphics2D drawString在Java 6之后生成无意义字符,java,graphics2d,Java,Graphics2d,在使用Java8将较旧的应用程序迁移到较新的服务器时,出现了这个问题:图像中使用Java6看起来很好的单词在Java7和Java8中变成了无意义的字符 以下是我的测试代码: package test; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.image.BufferedImage; import javax.imageio.*; import java.io.*;

在使用Java8将较旧的应用程序迁移到较新的服务器时,出现了这个问题:图像中使用Java6看起来很好的单词在Java7和Java8中变成了无意义的字符

以下是我的测试代码:

package test;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.io.*;

public class PicTest {

    public static void main(String[] args){
        String testNum = args[0];
        String fileName = "image"+testNum+".jpg";
        String testText = "Test "+testNum;

        BufferedImage image = new BufferedImage(200,200, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = image.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Font font = new Font("Serif", Font.PLAIN, 24);
        g2.setFont(font);
        g2.drawString(testText, 10, 20);
        File outputfile = new File(fileName);
        try {
            ImageIO.write(image, "jpg", outputfile);
        } catch (Exception e) {
            e.printStackTrace();
        }
   }
}
当我用Java6运行这个程序时

$ /usr/local/java/java6/bin/javac test/PicTest.java
$ /usr/local/java/java6/bin/java test/PicTest 4
。。。以下是(预期、正常)输出图像:

当我用Java 7运行这个程序时

$ /usr/local/java/java7_17/bin/javac test/PicTest.java
$ /usr/local/java/java7_17/bin/java test/PicTest 5
。。。以下是输出图像(带有无意义字符):

我使用Java8获得的图像与Java7相同

我所说的Java6是指jdk1.6.0"34 Java 7指的是jdk1.7.0_17

我是否应该使用不同的库或设置不同的内容,以便在Java的最新版本中实现这一点?

在Java 6中,“Serif”是一种逻辑字体。物理字体是在某个时候引入的,看起来您的系统上实际上有一个名为“Serif”的物理字体。使用不同的物理字体系列。或者“无衬线”

在java中,可以迭代所有:


谢谢-这让我走上了正轨。事实证明,我的测试程序在我的Mac上产生了可接受的输出(没有“胡说八道”字符),但在运行该程序的linux系统上,这就是问题所在。因此,这也表明字体是一个问题。在环境中的20种字体中,14种产生了垃圾,6种是好的(Serif和SansSerif都没有)。我更改了代码,使其循环使用每种字体并生成输出。
GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (String fontName : getAvailableFontFamilyNames()) {
    System.out.println(fontName);
}