我希望以前有人偶然发现以下问题。
我的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());
代替Canvas
和BufferStrategy
我只用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版本中是否有任何更改。 这是摘录: 菜单栏上的第一个菜单项应