相关疑难解决方法(0)

Java计时器

我正在尝试使用计时器来安排应用程序中的重复事件.但是,我希望能够实时调整事件触发的时间段(根据用户输入).

例如:

public class HelperTimer extends TimerTask
{
    private Timer timer;
    //Default of 15 second between updates
    private int secondsToDelay = 15;

    public void setPeriod(int seconds)
    {
        this.secondsToDelay = seconds;
        long delay = 1000; // 1 second
        long period = 1000*secondsToDelay; // seconds
        if (timer != null) 
        {
            timer.cancel();
        }
        System.out.println(timer);
        timer = new Timer();
        System.out.println(timer);
        timer.schedule(this, delay, period);
    }
    public int getPeriod()
    {
        return this.secondsToDelay;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我启动这个类的新实例并调用它的set period函数.但是,当我这样做时,我得到一个非法状态异常.你可以看到System.out.println(计时器); 在那里,因为我正在检查,并且确实,他们是两个不同的计时器...所以当我尝试在一个全新的Timer实例上运行计划调用时,为什么我会收到IllegalStateException!?!?!?!

java.util.Timer@c55e36
java.util.Timer@9664a1
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Task already …
Run Code Online (Sandbox Code Playgroud)

java timer

19
推荐指数
1
解决办法
3万
查看次数

java.lang.IllegalStateException:已经调度了TimerTask:在Android中合理使用Timer和TimerTask

我编写了一个连接到服务器的应用程序,并向他发送ping命令,服务器用pong命令回答.

我想实现连接超时机制.我想它将遵循:

  • 客户端使用timertask和delay 发送ping并启动计时器
  • 当客户端收到pong时,timertask被取消.

另外,我想优化内存.所以,每次发送ping命令时都不要重新创建TimerTask .我尝试下面的代码:

private final Timer mSystemLogoutTimer = new Timer();
private final TimerTask mLogoutTask = new TimerTask() {

    @Override
    public void run() {
        mMessageInterface.onConnectionTimeout();
        cancel();
    }
};

private void ping() {
    sendRequest(RequestBuilder.formPing());
    mSystemLogoutTimer.schedule(mLogoutTask, CoreConst.PING_ANSWER_DELAY);
}

private void onPong() {
    mLogoutTask.cancel();
}
Run Code Online (Sandbox Code Playgroud)

但是当我第二次尝试安排TimerTask时出现以下错误:

java.lang.IllegalStateException: TimerTask is scheduled already
at java.util.Timer.scheduleImpl(Timer.java:572)
at java.util.Timer.schedule(Timer.java:459)
Run Code Online (Sandbox Code Playgroud)

我不明白,因为我打电话cancel()给TimerTask.

请告诉我我做错了什么.谢谢你的回答!

android exception timer

6
推荐指数
1
解决办法
1万
查看次数

非法状态异常:任务已安排或取消

我有一个片段,其中包含一个图像按钮,通过计时器和其他4个链接到其他片段的按钮,定期更改图像.当我按下任何按钮时,它会跳转到该特定片段,但在按下后退按钮时,应用程序会崩溃.我试过timer.cancel但它没用.这是片段的代码:

public class Main2Activity extends Fragment {
View v;
Timer timer;
ImageView iv;
int i=0;
Integer[] imagechange = {

        R.drawable.capture1,R.drawable.capture2,R.drawable.capture,R.drawable.capture

};
String[] linkstop = new String[]{"http://www.webmd.com/","http://www.drugs.com/","http://www.cancer.gov/","http://www.nlm.nih.gov/medlineplus/"};
ListView lv;
TimerTask updateTask = new TimerTask() {

    @Override
    public void run() {

        getActivity().runOnUiThread(new Runnable() {

            @Override
            public void run() { // TODO Auto-generated method stub
                iv.setImageResource(imagechange[i]);
                i++;
                if (i > 3) {
                    i = 0;
                }
            }

        });
    }
};



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
v=inflater.inflate(R.layout.activity_main2,container,false);
    //lv=(ListView)v.findViewById(R.id.list); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

0
推荐指数
1
解决办法
1874
查看次数

标签 统计

android ×2

timer ×2

android-fragments ×1

exception ×1

java ×1