#java #timer #illegalstateexception #timertask
#java #таймер #исключение illegalstateexception #timertask
Вопрос:
снова. Я продолжаю получать IllegalStateException
, когда пытаюсь выполнить задачу после одного хода. В частности, упоминание о том, что задача уже запланирована или отменена. Вы знаете, как это исправить? Вот некоторый соответствующий код.
public class Human_Agent implements GipfPlayable {
String[] edgeSpots;
String[] columns;
Random rng;
GipfGame mg;
//int turn = 0;
String str;
Timer t;
Integer val;
Integer myDir;
public Human_Agent(GipfGame g) {
this.edgeSpots = g.getEdgeSpots();
this.columns = g.getColumns();
rng = new Random(37);
//turn = 0;
}
TimerTask task1 = new TimerTask()
{
public void run()
{
if (str.equals(""))
{
System.out.println("You did not input a valid location.");
System.exit(0);
}
}
};
TimerTask task2 = new TimerTask()
{
public void run()
{
if (val == null)
{
System.out.println("You did not input a valid direction.");
System.exit(0);
}
}
};
public String getUserInput() throws Exception
{
t = new Timer();
t.schedule(task1, 5*1000);
Scanner scan = new Scanner(System.in);
System.out.print("Please provide a starting location: ");
String startLocation = "";
String x = scan.nextLine();
str = x;
int dirE = 0;
//t.cancel();
// Timer t2 = new Timer();
if (isItValidLocation(x))
{
startLocation = x;
t.cancel();
t = new Timer();
t.schedule(task2, 10*1000);
//t.scheduleAtFixedRate(task2, 5000, 5*1000);
System.out.print("n Now, provide a number to move the piece");
dirE = scan.nextInt();
t.cancel();
}
else
{
System.out.println("Invalid Start location.");
t.cancel();
}
// scan.close();
// t.cancel();
return str " " Integer.toString(dirE);
}
@Override
public String makeGipfMove() {
String s;
try
{
s = getUserInput();
}
catch(Exception e)
{
String startLocation = edgeSpots[rng.nextInt(edgeSpots.length)];
Integer dir = rng.nextInt(6);
s = startLocation " " Integer.toString(dir);
e.printStackTrace();
}
// if ((mg.makeMove(x, dirE)) == false)
// {
// System.out.println("Can't move here.");
// }
//mg.makeMove(x, dirE);
// Integer dir = rng.nextInt(6);
//System.out.println("GIPHS REMAINING: " )
return s;
}
public boolean isItValidLocation(String a)
{
boolean v = false;
System.out.println("YOU ENTERED: " a);
for (int i = 0; i < edgeSpots.length; i )
{
System.out.println(edgeSpots[i]);
if ((edgeSpots[i].equals(a)) amp;amp; (v != true))
{
v = true;
}
}
System.out.println(v);
return v;
}
}
Что делает этот код, так это играет в игру Gipf с агентом-человеком.
Похоже, что ваш пост в основном состоит из кода; пожалуйста, добавьте еще несколько деталей. (Netbeans необходимо избавиться от этого, если вы добавили сведения о своем коде!)
Комментарии:
1. Что делает один ход, так это ввод местоположения и направления для перемещения фигуры gipf
2. «Похоже, что ваш пост в основном состоит из кода; пожалуйста, добавьте еще несколько деталей. (Netbeans необходимо избавиться от этого, если вы добавили сведения о своем коде!)» — зачем публиковать ненужный текст? Почему бы вместо этого не добавить больше текста, который объясняет весь этот код и вашу проблему более подробно?
3. К вашему сведению, это исключение IllegalStateException
Ответ №1:
Точно так же, как вы не можете повторно использовать a Timer
после его отмены, вы не можете повторно использовать a TimerTask
.
Вы можете создавать расширяющиеся классы TimerTask
и создавать их экземпляры всякий раз, когда вам нужно запланировать это.