为什么我的Java定时器程序不能在Mac上运行?

为什么我的Java定时器程序不能在Mac上运行?,java,Java,在Mac上使用java是否有任何原因导致我下面的代码无法工作?它正在Windows上工作。但是它不会在Mac上显示GUI,我已经尝试过更新java并重新启动机器。它仍然没有显示带有计时器的GUI。有可能是我用来编写代码的程序(Eclipse)吗 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TimerApplication extends JFrame implements Acti

在Mac上使用java是否有任何原因导致我下面的代码无法工作?它正在Windows上工作。但是它不会在Mac上显示GUI,我已经尝试过更新java并重新启动机器。它仍然没有显示带有计时器的GUI。有可能是我用来编写代码的程序(Eclipse)吗

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TimerApplication extends JFrame implements ActionListener{
    private javax.swing.Timer timer;
    private JTextField seconds;
    private JTextField minutes;
    private int nTimeDelay = 50;
    private int ticks = 0;

    public static void main(String[] args) {
        TimerApplication frame = new TimerApplication();
        frame.setSize(300, 100);
        frame.createGUI();
        frame.setVisible(true);
    }

    private void createGUI(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());;
        seconds = new JTextField();
        minutes = new JTextField();
        window.add(minutes);
        window.add(seconds);
        timer = new javax.swing.Timer(50, this);
        timer.start();
        ticks=0;
   }

   @Override
   public void actionPerformed(ActionEvent event) {
       if(event.getSource()==timer)
       {
           minutes.setText(String.format("%02d", (ticks*(nTimeDelay)/1000) / 60));
           seconds.setText(String.format("%02d",(ticks*(nTimeDelay)/1000) % 60));
           ticks++;
       }    
   }
}

这闻起来像是一个多线程错误

我认为,初始化
TimerApplication
并为
timer
赋值的“主”线程与将执行tour
actionPerformed
方法调用的Swing事件调度程序线程(EDT)之间的同步不足。这意味着
actionPerformed
调用可能永远看不到另一个线程中分配给
timer
的值

净结果:
event.getSource()==timer
将始终为false

纠正此问题的一种方法是进行以下更改:

synchronized (this) {
    timer = new javax.swing.Timer(50, this);
    timer.start();
    ticks = 0;
}


它在我的OSX机器上工作。那么当你执行它时会发生什么呢?没有例外吗?该过程是否完成?当我尝试运行文档时,它会打开一个java窗口,但没有出现GUI,等待20分钟后,它仍然没有显示或关闭,向我建议它正在后台运行,但不会显示。什么是“java窗口”?我正在使用Eclipse IDE编写代码,因此,当我运行一个程序时,它会将Java作为一个单独的应用程序窗口打开
synchronized (this) {
    if (event.getSource() == timer) {
        minutes.setText(String.format("%02d", ticks * nTimeDelay / 1000 / 60));
        seconds.setText(String.format("%02d", ticks * nTimeDelay / 1000 % 60));
        ticks++;
    }
}