如何在 java 中暂停预先实现的 Runnable class?
How to pause a pre-implemented Runnable class in java?
我有以下 animator
class 实现了 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;
}
放置在任何你想让程序休眠的地方:(在 if 语句中?)
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
这将告诉线程休眠多少毫秒。
正在做:
do{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while(something() == true);
这将继续检查该值,直到它为假。
根据您引用的文档,Animator
可以在迭代循环之间暂停一定时间。
animator.setSleepTime(10000);
然后当暂停条件结束时,您可以将休眠时间设置为更短的间隔。
但是,您似乎希望 Animator 在暂停条件为真时完全停止。在那种情况下,我建议您 stop()
当时的动画师(正如您的代码所做的那样),然后在暂停条件结束时再次 start()
它。看来您可以重复调用停止和启动方法。
如果你想暂停 animator
你必须先将 animator
对象和 vtxCol
对象初始化移动到另一个 Thread.Because 即使 Thread.sleep()
函数或 wait()
函数即将为您的目的工作,他们将停止函数初始化 animator
也可能不符合您的需要。
将 animator
对象创建移动到另一个单独的线程后,您必须考虑创建一些 LinkedList
、 Array
或某种 Collection
来保存您的运动数据命令由它们初始化vtxCol
和animator
对象,并将数据传递给线程。然后在 Thread.sleep()
函数中可以在创建的单独线程中回答您的需要。
我有以下 animator
class 实现了 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;
}
放置在任何你想让程序休眠的地方:(在 if 语句中?)
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
这将告诉线程休眠多少毫秒。
正在做:
do{
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while(something() == true);
这将继续检查该值,直到它为假。
根据您引用的文档,Animator
可以在迭代循环之间暂停一定时间。
animator.setSleepTime(10000);
然后当暂停条件结束时,您可以将休眠时间设置为更短的间隔。
但是,您似乎希望 Animator 在暂停条件为真时完全停止。在那种情况下,我建议您 stop()
当时的动画师(正如您的代码所做的那样),然后在暂停条件结束时再次 start()
它。看来您可以重复调用停止和启动方法。
如果你想暂停 animator
你必须先将 animator
对象和 vtxCol
对象初始化移动到另一个 Thread.Because 即使 Thread.sleep()
函数或 wait()
函数即将为您的目的工作,他们将停止函数初始化 animator
也可能不符合您的需要。
将 animator
对象创建移动到另一个单独的线程后,您必须考虑创建一些 LinkedList
、 Array
或某种 Collection
来保存您的运动数据命令由它们初始化vtxCol
和animator
对象,并将数据传递给线程。然后在 Thread.sleep()
函数中可以在创建的单独线程中回答您的需要。