I have researched for some time different methods to schedule a task after a certain amount of time (ie. Quartz, ScheduledThreadPool, java.util.timer) and I'm having problems understanding how to use it.
Here is just an example I found from my research and below I will insert the code that I'm creating. --->
import java.util.Timer;
import java.util.TimerTask;
public class TaskManager {
private Timer timer = new Timer();
public static void main(String[] args) {
TaskManager manager = new TaskManager();
manager.startTask();
}
public void startTask() {
timer.schedule(new PeriodicTask(), 0);
}
private class PeriodicTask extends TimerTask {
@Override
public void run() {
System.out.println(System.currentTimeMillis() + " Running");
/* replace with the actual task */
try {
Thread.sleep(15 * 1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
/* end task processing */
System.out.println(System.currentTimeMillis() + " Scheduling 10 seconds from now");
timer.schedule(new PeriodicTask(), 10 * 1000);
}
}
}
Please ignore GUI App method, i just inserted it in for clarity. Also i understand that my code may be unorganized so im sorry in advance for that.
So basically i have created a GUI with three frames; first is just the start frame so that can be ignored. The second frame is the one that will basically use the timer. What im trying to do is create a memory game that displays 12 random numbers from 1 to 12 in an array of 12 JButtons (this i have already) and then after a specified amount of time removes or hides(whichever is better) the numbers and the person who is playing has to click them in ascending order. If the person does click them correctly he/she will get 1 point, if not the person gets no points. He than clicks the "Check Answer" button and the numbers reset and the timer starts again. This will only happen 15 times.
And just for clarity all the help i need is with implementing the timer attribute. Thank you to anyone who takes the time to read this. You are a life saver!
// The "TryTryTryAgain" class.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.URL;
import java.util.Arrays;
import java.util.TimerTask;
import java.util.Date;
import java.util.Timer;
public class JavaMemoryGame_Final {
static JButton btnStart, buttonArray[] = new JButton[12];
static JFrame start, questions, survey;
static JTextField nameEnter;
static JLabel scoreOutput, lblTitle, lblPrompt1, lblPrompt2, t_fImage, lblInstruct, lblReadyCheck;
static JRadioButton reallyBad, bad, good, reallyGood;
static AudioClip clap, yess, noo;
static ButtonGroup finalSurvey;
static DefaultListModel listModel;
static JList difficulty;
static int randNumGenerator;
static int score = 0, arrayImage[] = new int[12];
private Timer timer = new Timer();
public static JButton[] randNum() {
arrayImage[0] = (int)(Math.random() * 12) + 1;
arrayImage[1] = (int)(Math.random() * 12) + 1;
while (arrayImage[1] == arrayImage[0]) {
arrayImage[1] = (int)(Math.random() * 12) + 1;
}
arrayImage[2] = (int)(Math.random() * 12) + 1;
while (arrayImage[2] == arrayImage[1] || arrayImage[2] == arrayImage[0]) {
arrayImage[2] = (int)(Math.random() * 12) + 1;
}
arrayImage[3] = (int)(Math.random() * 12) + 1;
while (arrayImage[3] == arrayImage[2] || arrayImage[3] == arrayImage[1] || arrayImage[3] == arrayImage[0]) {
arrayImage[3] = (int)(Math.random() * 12) + 1;
}
arrayImage[4] = (int)(Math.random() * 12) + 1;
while (arrayImage[4] == arrayImage[3] || arrayImage[4] == arrayImage[2] || arrayImage[4] == arrayImage[1] || arrayImage[4] == arrayImage[0]) {
arrayImage[4] = (int)(Math.random() * 12) + 1;
}
arrayImage[5] = (int)(Math.random() * 12) + 1;
while (arrayImage[5] == arrayImage[4] || arrayImage[5] == arrayImage[3] || arrayImage[5] == arrayImage[2] || arrayImage[5] == arrayImage[1] || arrayImage[5] == arrayImage[0]) {
arrayImage[5] = (int)(Math.random() * 12) + 1;
}
arrayImage[6] = (int)(Math.random() * 12) + 1;
while (arrayImage[6] == arrayImage[5] || arrayImage[6] == arrayImage[4] || arrayImage[6] == arrayImage[3] || arrayImage[6] == arrayImage[2] || arrayImage[6] == arrayImage[1] || arrayImage[6] == arrayImage[0]) {
arrayImage[6] = (int)(Math.random() * 12) + 1;
}
arrayImage[7] = (int)(Math.random() * 12) + 1;
while (arrayImage[7] == arrayImage[6] || arrayImage[7] == arrayImage[5] || arrayImage[7] == arrayImage[4] || arrayImage[7] == arrayImage[3] || arrayImage[7] == arrayImage[2] || arrayImage[7] == arrayImage[1] || arrayImage[7] == arrayImage[0]) {
arrayImage[7] = (int)(Math.random() * 12) + 1;
}
arrayImage[8] = (int)(Math.random() * 12) + 1;
while (arrayImage[8] == arrayImage[7] || arrayImage[8] == arrayImage[6] || arrayImage[8] == arrayImage[5] || arrayImage[8] == arrayImage[4] || arrayImage[8] == arrayImage[3] || arrayImage[8] == arrayImage[2] || arrayImage[8] == arrayImage[1] || arrayImage[8] == arrayImage[0]) {
arrayImage[8] = (int)(Math.random() * 12) + 1;
}
arrayImage[9] = (int)(Math.random() * 12) + 1;
while (arrayImage[9] == arrayImage[8] || arrayImage[9] == arrayImage[7] || arrayImage[9] == arrayImage[6] || arrayImage[9] == arrayImage[5] || arrayImage[9] == arrayImage[4] || arrayImage[9] == arrayImage[3] || arrayImage[9] == arrayImage[2] || arrayImage[9] == arrayImage[1] || arrayImage[9] == arrayImage[0]) {
arrayImage[9] = (int)(Math.random() * 12) + 1;
}
arrayImage[10] = (int)(Math.random() * 12) + 1;
while (arrayImage[10] == arrayImage[9] || arrayImage[10] == arrayImage[8] || arrayImage[10] == arrayImage[7] || arrayImage[10] == arrayImage[6] || arrayImage[10] == arrayImage[5] || arrayImage[10] == arrayImage[4] || arrayImage[10] == arrayImage[3] || arrayImage[10] == arrayImage[2] || arrayImage[10] == arrayImage[1] || arrayImage[10] == arrayImage[0]) {
arrayImage[10] = (int)(Math.random() * 12) + 1;
}
arrayImage[11] = (int)(Math.random() * 12) + 1;
while (arrayImage[11] == arrayImage[10] || arrayImage[11] == arrayImage[9] || arrayImage[11] == arrayImage[8] || arrayImage[11] == arrayImage[7] || arrayImage[11] == arrayImage[6] || arrayImage[11] == arrayImage[5] || arrayImage[11] == arrayImage[4] || arrayImage[11] == arrayImage[3] || arrayImage[11] == arrayImage[2] || arrayImage[11] == arrayImage[1] || arrayImage[11] == arrayImage[0]) {
arrayImage[11] = (int)(Math.random() * 12) + 1;
}
for (int x = 0; x <= 11; x++) {
buttonArray[x] = new JButton("" + arrayImage[x]);
buttonArray[x].setBackground(Color.orange);
}
for (int i = 0; i <= 11; i++) {
buttonArray[i].setActionCommand("" + arrayImage[i]);
}
return buttonArray;
}
private static void guiApp() {
start = new JFrame("Welcome");
start.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
questions = new JFrame("Memry_Game");
questions.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
survey = new JFrame("How Was It?");
survey.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnStart = new JButton("Enter");
lblTitle = new JLabel("Memory Match Game!");
lblInstruct = new JLabel("Welcome to the Memory Match Game!");
lblPrompt1 = new JLabel("Please enter your first name:");
lblPrompt2 = new JLabel("Choose Difficulty (#of seconds):");
nameEnter = new JTextField("");
scoreOutput = new JLabel("Score: " + score + "/15");
reallyBad = new JRadioButton("Really Bad");
bad = new JRadioButton("Bad");
good = new JRadioButton("Good");
reallyGood = new JRadioButton("Really Good");
lblReadyCheck = new JLabel("");
finalSurvey = new ButtonGroup();
finalSurvey.add(reallyBad);
finalSurvey.add(bad);
finalSurvey.add(good);
finalSurvey.add(reallyGood);
//Declare Audio
/*URL ebob = JavaMemoryGame_Final.class.getResource ("");
clap = Applet.newAudioClip (ebob);
URL bob = JavaMemoryGame_Final.class.getResource ("yes-1.wav");
yess = Applet.newAudioClip (bob);
URL tom = JavaMemoryGame_Final.class.getResource ("no-6.wav");
noo = Applet.newAudioClip (tom);*/
//set up radio buttons
finalSurvey = new ButtonGroup();
finalSurvey.add(reallyBad);
finalSurvey.add(bad);
finalSurvey.add(good);
finalSurvey.add(reallyGood);
//Set Up List Model
listModel = new DefaultListModel();
listModel.addElement("10");
listModel.addElement("15");
listModel.addElement("30");
//Set Up List
difficulty = new JList(listModel);
difficulty.setVisibleRowCount(1);
JScrollPane listScroll = new JScrollPane(difficulty);
for (int x = 0; x <= 11; x++) {
buttonArray[x] = new JButton("");
buttonArray[x].setBackground(Color.orange);
}
ButtonHandler onClick = new ButtonHandler();
btnStart.addActionListener(onClick);
for (int y = 0; y <= 11; y++) {
buttonArray[y].addActionListener(onClick);
}
JPanel mainStart = new JPanel(new BorderLayout());
mainStart.setBackground(Color.orange);
mainStart.setForeground(Color.orange);
JPanel scoreStuffs = new JPanel(new GridLayout(1, 2));
JPanel mainContent = new JPanel(new GridLayout(2, 2));
mainContent.setBackground(Color.orange);
mainStart.setForeground(Color.orange);
JPanel gameBoard = new JPanel(new GridLayout(2, 6));
gameBoard.setBackground(Color.orange);
JPanel gameContent = new JPanel(new GridLayout(1, 2));
JPanel mainGame = new JPanel(new BorderLayout());
mainGame.setBackground(Color.orange);
JPanel buttonScore = new JPanel(new GridLayout(3, 1));
buttonScore.setBackground(Color.orange);
JPanel feedbackPanel = new JPanel(new BorderLayout());
feedbackPanel.setForeground(Color.blue);
//Seperate Panels
mainContent.add(lblPrompt1);
mainContent.add(lblPrompt2);
mainContent.add(nameEnter);
mainContent.add(listScroll);
//Score Stuff for main Panel
scoreStuffs.add(scoreOutput);
scoreStuffs.add(btnStart);
//Main Welcome PAnel
mainStart.add(lblInstruct, BorderLayout.NORTH);
mainStart.add(mainContent, BorderLayout.CENTER);
mainStart.add(scoreStuffs, BorderLayout.SOUTH);
//GAme Board
gameContent.add(btnStart);
gameContent.add(scoreOutput);
gameBoard.add(buttonArray[0]);
gameBoard.add(buttonArray[1]);
gameBoard.add(buttonArray[2]);
gameBoard.add(buttonArray[3]);
gameBoard.add(buttonArray[4]);
gameBoard.add(buttonArray[5]);
gameBoard.add(buttonArray[6]);
gameBoard.add(buttonArray[7]);
gameBoard.add(buttonArray[8]);
gameBoard.add(buttonArray[9]);
gameBoard.add(buttonArray[10]);
gameBoard.add(buttonArray[11]);
mainGame.add(gameBoard, BorderLayout.CENTER);
mainGame.add(gameContent, BorderLayout.PAGE_END);
Container contentPane = start.getContentPane();
contentPane.add(mainStart);
Container contentPane1 = questions.getContentPane();
contentPane1.add(mainGame);
Container contentPane2 = survey.getContentPane();
contentPane2.add(feedbackPanel);
start.setSize(600, 450);
start.setVisible(true);
questions.setSize(500, 250);
questions.setVisible(true);
survey.setSize(600, 450);
survey.setVisible(true);
}
private static class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String textFieldValue = nameEnter.getText();
int index = difficulty.getSelectedIndex();
int selected = difficulty.getSelectedValue().toInt();
int check = 0;
while (check == 0) {
if (e.getSource() == ("Enter") && textFieldValue.length() != 0 && index > 0) {
lblPrompt1.setText("Thank You!");
lblPrompt2.setText("Thank You!");
btnStart.setText("Start?");
check = check + 1;
} else if (e.getSource() == ("Enter") && textFieldValue.length() == 0) {
lblPrompt1.setText("Enter first name before continuing!");
btnStart.setText("Check");
}
}
if (e.getSource() == ("Start?")) {
start.setVisible(false);
questions.setVisible(true);
}
}
}
public void startTask() {
timer.schedule(new PeriodicTask(), 0);
}
private class PeriodicTask extends TimerTask {@
Override
public void run() {
System.out.println(System.currentTimeMillis() + " Running");
/* replace with the actual task */
try {
Thread.sleep(15 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/* end task processing */
System.out.println(System.currentTimeMillis() + " Scheduling 10 seconds from now");
timer.schedule(new PeriodicTask(), 10 * 1000);
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
guiApp();
}
}
);
} // main method
} // TryTryTryAgain class