我有以下animator
类来实现Runnable(在JUNG documentation中提到)。
如果某个条件为真thread
一段时间然后pause
正在运行,怎么能告诉start
?
switch (args[0])
{
case "agent":
int size=nodeAttributes.size();
int i;
for(i=0;i<size;i++)
{
if(args[1].equals(nodeAttributes.get(i).nodeName))
{
VertexCollider vtxCol = new VertexCollider(layout, panel,args[1], args[2] , args[1] , nodeAttributes.get(i));
vtxCol.setMaximumIterations(1000);
vtxCol.setDesiredPrecision(1);
vtxCol.initialize();
Animator animator = new Animator(vtxCol);
animator.start();
if(nodeAttributes.get(i).isMoving)
{
animator.stop();
animator.wait(10000);
System.out.println("stopped");
}
nodeAttributes.get(i).isMoving = true;
break;
}
}
break;
}
答案 0 :(得分:1)
根据您引用的文档,Animator
可以在迭代循环之间暂停一段时间。
animator.setSleepTime(10000);
然后,当暂停条件结束时,您可以将睡眠时间设置为更短的间隔。
然而,当暂停条件为真时,您似乎希望您的动画师完全停止。在这种情况下,我建议您当时stop()
动画师(正如您的代码所做的那样),然后在暂停条件结束时再次start()
。看来你可以反复调用stop和start方法。
答案 1 :(得分:0)
放置程序要睡眠的位置:(在if语句中?)
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
这将告诉线程睡眠,无论你想要多少毫秒。
在do-while中:
do{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while(something() == true);
这将继续检查值,直到它为假。
答案 2 :(得分:0)
如果要暂停animator
,必须先将animator
对象和vtxCol
对象初始化移动到另一个Thread.Because,因为即使Thread.sleep()
函数或{ {1}}函数即将为您的目的而工作,它们将停止初始化wait()
的功能,这可能不符合您的需求。
将animator
对象创建移动到另一个单独的线程后,您必须考虑创建一些animator
,LinkedList
或某种Array
来保存您的移动数据,以便通过它们初始化Collection
和vtxCol
对象,并将数据传递给线程。然后在animator
函数中可以在创建的单独线程中回答您的需求。