私は一定の時間(例えば、Quartz、ScheduledThreadPool、java.util.timer)の後にタスクをスケジュールするためにいくつかの異なる方法を研究しています。 。私はjava.util.timerを使ってタスクを定期的にスケジュールしようとしています。私はどうすればよいか分かりません
私の研究で見つけた例ですが、下に私が作成しているコードを挿入します。 --->
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);
}
}
}
GUIアプリケーション法を無視してください、私はちょうど明確にするためにそれを挿入します。また、私は自分のコードが未編成であるかもしれないことを理解していますので、事前に申し訳ありません。
基本的に私は3つのフレームでGUIを作成しました。最初はちょうど開始フレームなので無視することができます。 2番目のフレームは基本的にタイマーを使用するフレームです。何をしようとしているのは、12個のJButtonの配列に1から12までの12個の乱数を表示するメモリゲームを作成してから、指定した時間が経過した後に番号を削除したり隠したりします。演奏している人は昇順にクリックしなければなりません。その人が正しくクリックした場合は1点を、そうでない場合はポイントを取得しません。彼は「アンサーを確認」ボタンをクリックすると、数字がリセットされ、タイマーが再び始まります。これは15回しか起こりません。
私が必要とするすべてのヘルプは、timer属性を実装するだけです。これを読む時間がかかる人に感謝します。あなたは命の恩人です!
// 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
リスナークラスを使用して、ボタンハンドラメソッドによって呼び出されたフレームのレイアウトを変更する方法を教えてください。例えば、ボタンがクリックされ、ボタンハンドラが通知され、今度はListenerクラスにそのコードを一度実行するように伝えたいとします。どのように私はそれを参照しますか? – Toni
actionPerformed()の内部で、プログラムの別の場所で別のメソッドを呼び出します。次に、ボタンが押されたら、同じメソッドをハンドラの内部から呼び出します。 – RobotKarel314