为什么我的 Java 计时器不工作?

Why is my Java timer not working?

我正在尝试制作一个简单的 Java GUI,它允许您输入时间,一旦时间用完,它就会播放声音。出于某种原因,我发现了一个错误,尽管我查看了许多不同的来源,这些来源都告诉我使用 Timer 或 Handler。这是我的代码:

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author CIS
 */
import java.io.*;
import sun.audio.*;
import java.util.TimerTask;


public class Timer extends javax.swing.JFrame {


    public Timer() {
        initComponents();
        initEditable();
    }

    AudioPlayer MGP = AudioPlayer.player;
        AudioStream BGM;
        AudioData MD;

        ContinuousAudioDataStream loop1 = null;
   AudioPlayer ABC = AudioPlayer.player;
        AudioStream ABCD;
        AudioData ABCDE;

        ContinuousAudioDataStream loop2 = null;

    public void initEditable(){

}

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        textFieldTimer = new javax.swing.JTextField();
        buttonTest = new javax.swing.JButton();
        buttonSet = new javax.swing.JButton();
        labelTimeRemaining = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        buttonTest.setText("Test Sound");
        buttonTest.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonTestActionPerformed(evt);
            }
        });

        buttonSet.setText("Set");
        buttonSet.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonSetActionPerformed(evt);
            }
        });

        labelTimeRemaining.setText("time remaing");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(textFieldTimer)
                    .addComponent(buttonTest, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(buttonSet)
                    .addComponent(labelTimeRemaining)))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {buttonSet, buttonTest, labelTimeRemaining, textFieldTimer});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textFieldTimer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelTimeRemaining))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(buttonTest)
                    .addComponent(buttonSet)))
        );

        pack();
    }// </editor-fold>                        
    int hello = 1000;

    public void music1(){
        ContinuousAudioDataStream loop = null;
        try
        {
            InputStream alert = new FileInputStream("alert.wav");
            BGM = new AudioStream(alert);
            AudioPlayer.player.start(BGM);

            //MD = BGM.getData();
            //loop = new ContinuousAudioDataStream(MD)
        }
        catch(FileNotFoundException e){
            System.out.print(e.toString());
        }
        catch(IOException error)
        {
            System.out.print(error.toString());

        }
        MGP.start(loop1);

        }

    private void buttonSetActionPerformed(java.awt.event.ActionEvent evt) {                                          

    new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        music1();      
    }
}, 2000);

    }                                         

    private void buttonTestActionPerformed(java.awt.event.ActionEvent evt) {                                           
        music1();
    }                                          


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Timer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Timer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Timer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Timer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Timer().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton buttonSet;
    private javax.swing.JButton buttonTest;
    private javax.swing.JLabel labelTimeRemaining;
    private javax.swing.JTextField textFieldTimer;
    // End of variables declaration                   





}

当我到达终点时 new Timer().schedule(new TimerTask() { 我在 schedule 上出错。 如果我提出问题的方法不正确,我深表歉意,我是新手,也是 Java 编程的新手。

您的 class 与 java.util.Timer class 同名。您必须通过完全限定 class 名称来消除歧义:

new java.util.Timer().schedule(new TimerTask() {