系统规范和代码示例在此贡献的末尾!
首先,我是这个论坛的新手。请告诉我布局或问题本身是否有任何问题。我也是 linux、ubuntu 的新手,也是 java 的新手。我在ubuntu之前使用的是Windows 7。在我的机器上安装 ubuntu 后首先出现问题。
问题
在 Eclipse 中运行动画窗口时,使用 swing 包或 java 小程序 -动画跳动且不流畅。我将向您展示我的一个非常简单程序的代码示例,该程序由一个 JPanel 和一个带有背景的 JFrame 和一个从左到右移动的二维球组成。该程序设置为每 30 毫秒重绘一次。运行这样的简单图形应该不是问题。否则,Eclipse 快速而流畅。如果有人以前遇到过这样的事情,将不胜感激任何帮助或建议!
编辑:
添加一个例外:当我将鼠标悬停在应用程序窗口上(并继续移动它)时,动画停止跳动。当我停止移动时,它又开始变得不平滑和跳跃。有人听说过这个吗?
我试过的
*搜索与此相关的错误或问题,但未找到任何
*安装最新版本的Eclipse和最新的JDK
*编辑我的 eclipse.ini 文件
*在我的 Windows 7 机器上运行我的代码(工作正常)
*安装bumblebee并使用nvidia optimus
系统
操作系统:Ubuntu 12.04(精确)64 位
内存:5.6 GiB,处理器 Intel Core 2.5 GHz x 4 CPU
Eclipse 朱诺 4.2.0
java -version 带给我
$ -java version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
lspci | grep VGA 带给我
00:02:0 VGA compatible controller: Intel Corporation Ivy Bridge Graphics Controller (rev 09)
我的 eclipse.ini 文件
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xincgc
-XX:NewSize=8m
-XX:MaxPermHeapExpansion=10m
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseParNewGC
-XX:+CMSConcurrentMTEnabled
-XX:ConcGCThreads=2
-XX:ParallelGCThreads=2
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=5
-XX:GCTimeRatio=49
-XX:MaxGCPauseMillis=20
-XX:GCPauseIntervalMillis=1000
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+AggressiveOpts
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-Dosgi.requiredJavaVersion=1.7
-Dhelp.lucene.tokenizer=standard
-XX:MaxPermSize=128m
-XX:PermSize=128m
-Xmn128m
-Xms1024m
-Xmx1024m
-Xss2m
-XX:+UseConcMarkSweepGC
代码示例
/////////Sample from the JPanel class (extends JPanel)/////////
private int y = 200;
private int x = 0;
public testPanel() {
setVisible(true);
setPreferredSize(new Dimension(1500, 400));
setBackground(Color.black);
}
public void move() {
x = x + 2;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillOval(x, y, 50, 50);
}
}
///////Sample from the JFrame class (extends JFrame)/////////
private testPanel thePanel = new testPanel();
private Timer t = new Timer(30, this);
public testFrame() {
add(thePanel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
t.start();
}
public void actionPerformed(ActionEvent e) {
thePanel.move();
repaint();
}