Java Graphics.drawLine() 不准确:绘制的线条太长

Java Graphics.drawLine() inexact: drawn lines are too long

我有一个顶点为 (0,0)、(100,0)、(100,100) 和 (0,100) 的多边形。 我调试了程序,这些正是 java 正在绘制的行。 不是绘制一个精确的正方形,而是一些线条太长了一个像素:
http://gyazo.com/7418546c51c9a10fc690b18afcc96360.png
(绿色圆圈只是我在测试质心)。 当我将正方形移出角时,您可以看到左上角是唯一完全正确的角。 为什么会这样? 就在drawLine之前,我把线条转换成整数坐标后写到控制台,它们是正确的。所以除了 drawLine 函数之外,我看不出有什么可能是错误的。 画线:

        g.drawLine((int) line.getStart().getX(), (int) line.getStart().getY(), 
            (int) line.getEnd().getX(), (int) line.getEnd().getY());

这条线有一个起始向量和一个结束向量。向量包含 x 和 y。

即使这样做:

    g.drawLine(0, 0, 100, 0);
    g.drawLine(100, 0, 100, 100);
    g.drawLine(100, 100, 0, 100);
    g.drawLine(0, 100, 0, 0);

它仍然产生相同的结果。 这虽然有效:

    g.drawLine(0, 0, 100, 0);
    g.drawLine(101, 0, 101, 100);
    g.drawLine(100, 101, 0, 101);
    g.drawLine(0, 100, 0, 0);

您提供的示例有效:

    BufferedImage bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.getGraphics();
    g.fillRect(0, 0, bi.getWidth(), bi.getHeight());
    g.setColor(Color.red);
    g.translate(50, 50);
    g.drawLine(0, 0, 100, 0);
    g.drawLine(100, 0, 100, 100);
    g.drawLine(100, 100, 0, 100);
    g.drawLine(0, 100, 0, 0);
    JOptionPane.showMessageDialog(null, new ImageIcon(bi));

有一个错误 https://bugs.openjdk.java.net/browse/JDK-8049901 描述了一个可能的问题。