当前位置: 首页 > 面试题库 >

Mac OS不支持Java页面翻转?

曾珂
2023-03-14
问题内容

我希望以前有人偶然发现以下问题。

我的Java应用程序在Mac上存在图形性能问题,因此我制作了一个简单的测试应用程序(下面的代码)。当我在Windows上运行此命令时,控制台会告诉我:

GraphicsConfiguration是否翻转?真正的
BufferStrategy翻转?真正

在Mac OS上运行完全相同的代码时,我得到:

GraphicsConfiguration是否翻转?真正的
BufferStrategy翻转?假

这是否意味着在Mac OS中,窗口应用程序根本不支持页面翻转?是否有任何技巧可以使Mac OS上的页面翻转功能不全屏显示?

所有指针都非常欢迎,
Mattijs

在Windows XP和Mac OS 10.5上使用JDK 1.6。

代码:

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();
 }
}

问题答案:

坏消息:在相同的Mac OS X配置上我得到相同的结果。好消息:isAccelerated()是的。

System.out.println("BufferStrategy accelerated? " + bufferStrategy
    .getCapabilities().getFrontBufferCapabilities().isAccelerated());

代替CanvasBufferStrategy我只用new JPanel(true)

附录:例如,

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class NewTest extends JPanel implements ActionListener, Runnable {

    private Random r = new Random();
    private Timer t = new Timer(10, this);

    public static void main(String[] args) {
        EventQueue.invokeLater(new NewTest());
    }

    @Override
    public void run() {
        JFrame f = new JFrame("NewTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        t.start();
    }

    public NewTest() {
        super(true);
        this.setPreferredSize(new Dimension(640, 480));
    }

    @Override
    protected void paintComponent(Graphics g) {
        int width = this.getWidth();
        int height = this.getHeight();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.RED);
        g.drawLine(r.nextInt(width), r.nextInt(height),
            r.nextInt(width), r.nextInt(height));

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        this.repaint();
    }
}


 类似资料:
  • 我要求在JSF2.2页面上输入2个输入值。我们正在使用Primefaces控件。然后通过h:command按钮将这些值提交给托管bean方法。 然后,基于这些值,我想将同一JSF页面上的一个单独的输出字段设置为一个特定的值。 因此,我目前的问题是尝试连接一个托管bean,以便它将一个值返回到我的JSF页面上的字段,在本例中,字段名是mgrs。主要的问题是,我要处理的是生成返回值的第三方库,我不确定

  • 自己身边没有windows系统,如果安装的虚拟机支持吗?

  • 我有一个Electron应用程序,我正试图打开一个本机文件选择器对话框,并限制用户只选择一个具有某个自定义扩展名的文件(称之为.foo)。 在macOS(莫哈韦,如果有必要的话)上,使用Electron ^3.0.0,这: 将打开仅允许用户选择目录的本机文件选择器。 这个: 将打开一个本机文件选择器,允许我拾取单个文件,但允许选择具有任何扩展名的文件。 如何在macOS上打开本机文件选择器对话框,

  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 我需要在php上运行一些java代码,所以我找到了这个 所以我下载了tomcat并放置了JavaBridge。我在webapps目录中找到了war,并让这些例子发挥了作用(我花了一段时间才弄明白这一点) 我甚至可以加载内置的java东西,并用我自己的PHP代码运行示例JAR。 我做不到的是制作自己的jar并运行它。我尝试了各种不同的编译器(Eclipse、Netbeans、命令行),但都没有用。

  • 问题内容: 突出的链接是http://www.devdaily.com/blog/post/jfc-swing/handling-main-mac-menu-in- swing-application/, 但是Mac OS X下的菜单栏显示为软件包名称而不是应用程序名称。我使用上面链接中的代码没有任何运气,所以我不确定在最近的Mac OS版本中是否有任何更改。 这是摘录: 菜单栏上的第一个菜单项应