Я надеюсь, что кто-то случайно наткнулся на следующую проблему.
У моего Java-приложения есть проблемы с графической производительностью на Mac, поэтому я сделал простое тестовое приложение (код ниже). Когда я запускаю это в Windows, консоль говорит мне:
ГрафикаКонфигурация переключается? правда
BufferStrategy листает? правда
Когда я запускаю точно такой же код в Mac OS, я получаю:
ГрафикаКонфигурация переключается? правда
BufferStrategy листает? ложь
Значит ли это, что в Mac OS перелистывание страниц просто не поддерживается в оконном приложении? Есть ли какие-нибудь хитрости, чтобы заставить перелистывать страницы работать в Mac OS, не переходя в полноэкранный режим?
Все указатели очень приветствуются,
Mattijs
Использование JDK 1.6 в Windows XP и Mac OS 10.5.
код:
import java.awt.image.BufferStrategy;
import javax.swing.*;
import java.awt.*;
public class Test {
int width = 640;
int height = 480;
GraphicsEnvironment graphEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice graphDevice = graphEnv.getDefaultScreenDevice();
GraphicsConfiguration graphicConf = graphDevice.getDefaultConfiguration();
public Test() {
JFrame jFrame = new JFrame(graphicConf);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setTitle("double buffer test");
jFrame.setResizable(false);
jFrame.setFocusTraversalKeysEnabled(false);
Canvas canvas = new Canvas();
canvas.setSize(width, height);
canvas.setIgnoreRepaint(true);
jFrame.getContentPane().add(canvas);
jFrame.pack();
jFrame.setVisible(true);
System.out.println("GraphicsConfiguration flipping? " + graphicConf.getBufferCapabilities().isPageFlipping());
canvas.createBufferStrategy(2);
BufferStrategy bufferStrategy = canvas.getBufferStrategy();
System.out.println("BufferStrategy flipping? " + bufferStrategy.getCapabilities().isPageFlipping());
while(true) {
Graphics g = bufferStrategy.getDrawGraphics();
g.setColor(Color.BLACK);
g.fillRect(0,0,width,height);
g.setColor(Color.RED);
g.drawLine((int)(Math.random()*width),(int)(Math.random()*height),
(int)(Math.random()*width),(int)(Math.random()*height));
bufferStrategy.show();
g.dispose();
}
}
public static void main(String[] args) {
new Test();
}
}