我有一个渲染项目的方法。
我遇到的问题是我希望4.1秒钟后开关盒破裂。我不想使用Thread.sleep
,因为它会在运行时冻结整个屏幕。
这是我尝试过的方法,但是不起作用:
private void drawItems(){
itemSelected = randomInt.getValue3();
switch (itemSelected){
case 0: if (!Obstacle.case0) {
doSomething();
}
new java.util.Timer().schedule(
new java.util.TimerTask() {
public void run() {
break;
}
},
4100
);
// other cases
我想破坏它,因为否则会在屏幕上渲染超过1个项目,但是问题是“破坏”必须在开关或循环外部。
答案 0 :(得分:1)
最简单的形式是:
<Label Content="{Binding DayNumber}">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
Value="True">
<Setter Property="FontWeight" Value="ExtraBold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
然后在您的主要方法/驱动程序类中:
public class DrawingThread extends Thread {
private boolean goon = true;
public void run() {
//Drawing routine.. stop if goon is no longer true
}
public void requestStop() {
goon = false;
}
}
Some pointers at Jenkov.com,也在Oracle的Java文档中。如果这对您来说很有效,请考虑重用Thread对象,该页面侧栏中第26点下方的内容可能会有用。
答案 1 :(得分:1)
您根本不应该触发线程,只需使用增量时间处理时间,您以后也可以创建包装器:
这是我的计时器实现: libgdx Timer countdown implmentation
答案 2 :(得分:1)
没有足够的声誉来发表评论,但是我不会像人们所建议的那样使用本机Java线程来解决此问题。我注意到该帖子被Libgdx标记。 Libgdx在其文档中明确指出不支持线程,因此我会谨慎使用它们。
您应该做的是每隔一段时间调用一次drawItems函数。 Libgdx有自己的计时器类,我相信它们使用与主线程相同的线程(不过请不要在此引用我,可以肯定的是,我将使用Hllink的答案)。从当前代码中删除计时器计划,并将其移至调用drawItems函数的位置,并在每次完成时重新启动计时器,以便在需要时无限循环。我现在正在使用手机,因此稍后会弹出我的桌面并发布代码。