HI。 我想在java中自动调用一个函数。
例如,我们使用Time
类,如blew
每1秒actionperformerd()
函数调用。
Timer time = new Time(10,this);
.
.
.
public void actionperformed()
{
timer.run;
//i want move a pic every 1millisecond.
}
我的问题是Timer
类只接受int值而且它是最小的
值是1秒,我希望每1毫秒执行一次调用操作。
答案 0 :(得分:10)
Java Timer在参数中接受毫秒。所以你可以做到
new Timer().schedule(new TimerTask() {
public void run() {
// do stuff
}
}, 1, 1);
但要获得具有毫秒精度的实时功能,您可能需要切换到C.
答案 1 :(得分:2)
尝试java.util.concurrent中的一些类,而ScheduledThreadPoolExecutor可以做你想做的事情:
public static void main(String[] args) throws Exception {
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.schedule(new Runnable() {
@Override
public void run() {
// Do something here.
}
}, 1, TimeUnit.MILLISECONDS);
}
BTW,计时器类不能定期准确地运行作业,它只能创建一个线程来运行任务。
答案 2 :(得分:1)
您可以使用单独的线程
class MyThread extends Thread {
public void run() {
while (!interrupted()) {
try {
// move my object, then sleep for a millisecond
sleep(1);
} catch (InterruptedException e) {
}
}
}
}
然而,在实践中,您很少会设法让您每隔1 ms移动一次调用函数,因为其他线程也在消耗处理器时间。因此,您需要考虑上一个线程循环结束与当前时间之间的实际时间。
我建议你阅读很多关于“游戏循环”的教程,你将学习如何组织移动对象,渲染等功能......
这是interesting article。适用于Android,但可以应用于标准Java。
答案 3 :(得分:0)
如果这恰好是图形化的,请注意您实际更新了EDT(事件调度线程)中的屏幕。 GUI 不多线程。
通过以1毫秒的间隔更新你的EDT更新(如果你每张照片都这样做更糟)你可能实际上使GUI无法使用 - 它正在忙于重绘而不是响应用户输入。
我真的不知道这种效果是否会以1 ms的间隔发生,但GUI的单线程设计是需要考虑的因素。