Точность только 16 бит в текстовом рисунке Swing на Linux JVMJAVA

Программисты JAVA общаются здесь
Anonymous
Точность только 16 бит в текстовом рисунке Swing на Linux JVM

Сообщение Anonymous »

Я наткнулся на странное поведение отображения при печати текста с помощью Swing G2D.DrawString () с одной огромной координатой:

Код: Выделить всё

static public void main(String[] args) {
JFrame f = new JFrame();

JPanel p = new JPanel() {
private static final long serialVersionUID = 1L;
@Override public void paintComponent(Graphics g1) {
Graphics2D g = (Graphics2D)g1;
g.drawString(" XX-XXXX-XX ", 0     , 16     );
g.drawString(" XX-XXXX-XX ", 50    , 1179664);
}
};
p.setPreferredSize(new Dimension(120, 120));

f.getContentPane().add(p, BorderLayout.CENTER);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
Когда запускается вышеупомянутый код Quick'n'dirty, первый вызов на шнур () должен отображать строку, но второй не должен (не должен (не должен ( Значение слишком большое для размера панели).
оба значения 16 и 1179664 , где выбираются, чтобы оба текста идеально совпадают, чтобы доказать, что положение одинакова. rendered at position 16:
Изображение

But on Windows with OpenJDK 18 and Oracle JDK 8 это правильно (то есть не отображается, потому что очень много за пределами отображаемой области):
. sun.java2d.xr.xrbackendnative.xrendercompositeTextNative () , где srcy имеет правильное значение, но он интерпретируется неправильно: 1179664-0x12_0010 , что действительно 16 , когда Truncation Not Infactionation, не упомянутая, не указана, не является указанием. Похоже, это ошибка в JVM Linux (или, по крайней мере, несоответствие с версией Windows), поэтому я должен сообщить об этом или есть обходной путь, который я должен использовать (кроме очевидного теста координат)?

Подробнее здесь: https://stackoverflow.com/questions/730 ... -linux-jvm

Вернуться в «JAVA»