想要先启动螺纹时钟而不先点击某些东西然后发出警报

时间:2016-03-28 08:56:48

标签: java multithreading user-interface clock alarm

您好我想创建一个显示时钟的线程但是使用此代码我只能在设置输入警报后使时钟运行,尽管警报也没有工作。想要将闹钟与时钟分开

这是时钟(工作)

public class ClockAlarm extends Thread{

private String txt;  
private JLabel Clock;
ClockAlarm(JLabel lbl) {
    this.Clock = lbl;
}

ClockAlarm(){
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public void run()
    {
        while(true)
        {
            try
            {
                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                Date date = new Date();
                String s = sdf.format(date);
                Thread.sleep(1000);

                Clock.setText(s);
            }
            catch(Exception e){}

        }
}

}

这是GUI,Idk在与时钟等于时将警报验证放在哪里,我不知道将myThread.start放在哪里或者在运行时可以启动它的程序

public class GUI extends javax.swing.JFrame {
        ClockAlarm myThread1;
        String Alarm;

        /**
         * Creates new form GUI
         */
        public GUI() {
            initComponents();
        }
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
            if(jButton1.getText().equalsIgnoreCase("Set Alarm (hh:mm:ss)")){
                Alarm = jTextField1.getText();
            }
            myThread1 = new ClockAlarm(jLabel1);
            myThread1.start();

        }                                        

        private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
            // TODO add your handling code here:

        }                                           

    public static void main(String args[]) {

            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new GUI().setVisible(true);

                }

            });
        }

        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JTextField jTextField1;
        // End of variables declaration                   
    }

1 个答案:

答案 0 :(得分:0)

public class GUI extends JFrame implements ActionListener{

    public GUI() {
         jLabel1=new JLabel();
    }



    @Override
    public void actionPerformed(ActionEvent e) {

        if(e.getSource()==jButton1)
        {
               new ClockThread(jLabel1).execute();
        }

    }

public static void main(String args[]) {
        GUI gu=new GUI();
        gu.setVisible(true);
    }

}

public class ClockThread extends SwingWorker<String, String> {

private JLabel clock;
private String msg;

public ClockThread(JLabel clock) {
    this.clock = clock;
}

@Override
protected void done() {
    try {
        msg = get();
        if (SwingUtilities.isEventDispatchThread()) {
            clock.setText(msg);
        }
    } catch (Exception e) {
    }
}

@Override
protected void process(List<String> res) {
    super.process(res);
    for (String result : res) {
        if (SwingUtilities.isEventDispatchThread()) {
            clock.setText(result);
            clock.revalidate();
        }
    }
}

@Override
public String doInBackground() {
    String s = "";
    while (true) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            Date date = new Date();
            s = sdf.format(date);
            Thread.sleep(1000);
            publish(s);
        } catch (Exception e) {
            return s;
        }
    }
}
}