简单动画的 Java 代码仅在 Windows 上运行

标签 java macos swing animation paint

在这个弹跳球动画的简单代码示例中:

import javax.swing.JApplet;
import javax.swing.JFrame;
import java.awt.*;

public class GraphicsMovement extends JApplet
{
public static void pause()
{
    try {
        Thread.sleep(10);
        } catch(InterruptedException e) {
          }
}

public static void main(String args[])
{
    JApplet example = new GraphicsMovement();
    JFrame frame = new JFrame("Movement");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(example);
    frame.setSize(new Dimension(500,300));       //Sets the dimensions of panel to appear when run
    frame.setVisible(true);
}

  public void paint (Graphics page)
  {
 int width = getWidth();    // width = the width of the panel which appears when run
 int height = getHeight();  // height = the height of the panel which appears when run.

//Changes background color to a blueish color
page.setColor(new Color (140,214,225));
page.fillRect(0,0,width,height);
for(int i = 0; i <= 5; i++)
{
    for (int j = 0; j <= 100; j++)
    {
        page.setColor(Color.YELLOW);
        page.fillOval(100,55 + j,100,100);  //draws a yellow oval
        pause();
        page.setColor(new Color (140,214,225));
        page.fillOval(100,55 + j,100,100);  //draws a blueish oval over the yellow oval
    }
    for (int k = 100; k >= 0; k--)
    {
        page.setColor(Color.YELLOW);
        page.fillOval(100,55 + k,100,100);  //draws a yellow oval
        pause();
        if (k != 0)
        {
            page.setColor(new Color (140,214,225));  //draws a blueish oval over the yellow oval
            page.fillOval(100,55 + k,100,100);
        }
    }
}
 }
 }

动画绘制得很好,可以在 Windows 机器上运行(使用 JCreator),但不能在使用 IntelliJ 或 Eclipse 编译的 Mac OS X 上运行。在两台不同的 OS X 机器上尝试过,两台机器都会绘制球和背景(经过漫长的等待),但不会继续执行动画。

这里是否缺少某种特定于平台的代码? 谢谢!

最佳答案

paint() 方法在 UI 线程中调用,它应该尽快返回。

那么你将把动画代码放在哪里?答案很简单:你需要将代码放入单独的线程中。

对于 Windows 和 OS X 之间的差异,我只能说应该与它们如何调度线程或类似的东西有关。

关于简单动画的 Java 代码仅在 Windows 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013287/

相关文章:

macos - 不能使用带有私用Pem key 的ssh(找不到dlopen镜像)

c++ - 如何查询我的 MacOS/X 应用程序是否处于应用程序小睡模式?

c# - 在 VS for mac 上运行项目

java - 如何从主类加载 Java GUI 类?

Java:如何在 OS X Lion 中获取滚动方法?

java - 使用 Java 进行排序和二分搜索

java - 如何使用jdbc通过单击数据库中的按钮来提交数据?

java - 如何在 java spinner 中将 1000 显示为 1.000

java - 如何检查 Hashmap 值中的子字符串

Java-如何通过包含换行符的属性值进行选择