Необходимо запустить приложение ниже Java swing на один час один раз

#swing

#swing

Вопрос:

Я создал одну панель задач. Но я хочу отображать эту панель задач один раз в час, когда пользователь нажимает на кнопку напоминания, и панель задач должна закрыться и снова открыться через час.Пожалуйста, найдите приведенный ниже код.

Пожалуйста, помогите мне в этом, пожалуйста!!

 import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class RadioButtons {

public static void main(String[] args) {


    Radiobutton r=new Radiobutton();

}
}

class Radiobutton extends JFrame implements ActionListener
{
JButton b1,b2;
JLabel l1,l2;
public Radiobutton()
{
    l1=new JLabel("Pending");
    l2=new JLabel("Pending");
    b1=new JButton("AVM DART");
    b2=new JButton("HANDSHAKE");
    add(b1);
    add(l1);
    add(b2);
    add(l2);
    b1.setBackground(Color.RED);
    b2.setBackground(Color.RED);
    b1.setPreferredSize(new Dimension(200, 50));
    b2.setPreferredSize(new Dimension(200, 50));
    b1.addActionListener(this);
    b2.addActionListener(this);
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
    Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
    int x = (int) rect.getMaxX() -300;
    int y = 500;
    setLocation(x, y);
    setLayout(new FlowLayout());
    setVisible(true);
    setSize(300, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if(e.getSource()==b1)
    {
        if (((Component)source).getBackground().equals(Color.GREEN))
        {
            ((Component)source).setBackground(Color.RED);
            l1.setText("Pending");
        } 
        else 
        {
            ((Component)source).setBackground(Color.GREEN);
            l1.setText("   Done");
        }

    }
    if(e.getSource()==b2)
    {
        if (((Component)source).getBackground().equals(Color.GREEN))
        {
            ((Component)source).setBackground(Color.RED);
            l2.setText("Pending");

        } else 
        {
            ((Component)source).setBackground(Color.GREEN);
            l2.setText("   Done");
        }
    }


    }

}
  

Комментарии:

1. Напоминание будет работать только в том случае, если ваш Java-код не завершен. Это будет нормально?

2. Да, конечно, для меня это нормально

Ответ №1:

Я предполагаю, что класс RadioButton — это ваша панель задач, которую вы хотите всплывать один раз в час. Интерфейс «ScheduledExecutorService» может выполнить вашу работу здесь.

Пример:

 public class RadioButtons 
{
    // This is the Scheduler that we will execute every hour
    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

   public static void main(String[] args) 
   {
      // instead of instantiating it here, we will do this in a thread.
      //Radiobutton r = new Radiobutton();

      final Runnable beeper = new Runnable() 
      {
         public void run() 
         { 
            // do anything here that you want to execute in a scheduler.
            Radiobutton r=new Radiobutton();
         }
      };

      //finally we schedule the scheduler to execute Runnable every hour.
      final ScheduledFuture<?> beeper = scheduler.scheduleAtFixedRate(beeper, 0, 1, TimeUnit.HOURS);

   }
}
  

Примечание: ваш фрейм запустится сразу после запуска программы, а затем через каждый час. Кроме того, если вы не закроете фрейм, то через час откроется новый фрейм (старый фрейм не закроется, пока кто-нибудь не закроет его вручную).

Вы можете прочитать больше о ScheduledExecutorService и его методе scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) на https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html

Комментарии:

1. Большое спасибо Ришабу Кумару.. Это может быть полезно.. Однако, пожалуйста, дайте мне знать, как поддерживать сеанс в приложении. Поскольку мне нужно отобразить задачу, которая также была завершена

2. Под завершением вы подразумеваете появление фрейма класса Radio?

3. Нет Rishabh. Если вы запустите мое приложение, вы увидите задачу в состоянии «ожидание», как только пользователь нажмет на задачу, в нем появится сообщение как «Готово». Я хочу поддерживать это состояние в течение дня. Но здесь, если мы запускаем его через час, оно запускается как новое приложение, и все задачи снова меняются на ожидающие..

4. Хорошо, тогда для этого вы можете использовать метод setVisible(). Инициализируйте объект вашего класса RadioButton в main(). В планировщике установите для видимости этого объекта значение true. Также удалите setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); из вашего конструктора переключателей. Теперь всякий раз, когда кто-то закрывает фрейм, он просто скроется и не закроется. Затем планировщик может установить его видимым на своевременной основе. Это сохранит состояние вашего фрейма.