Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getSystemIdleTime, Вопрос для специалистов по Java 
:(
    Опции темы
Вано
Дата 20.1.2005, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 23.6.2004

Репутация: нет
Всего: нет



Как можно на java определить время ничегонеделания юзера (idle time), то есть того время от того момента, когда юзер перестал нажимать на клаву и двигать мишью?
PM MAIL   Вверх
Domestic Cat
Дата 20.1.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Поставь листенеры на мышь/клаву и отмечай время последнего действия. А дальше зависит от того, для чего это нужно.


--------------------

PM   Вверх
LSD
Дата 20.1.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Вот примерчик:
Код

public class ScreenSaverManager
{
 public static final long AWT_EVENT_MASK = AWTEvent.MOUSE_WHEEL_EVENT_MASK
                                         | AWTEvent.MOUSE_MOTION_EVENT_MASK
                                         | AWTEvent.MOUSE_EVENT_MASK
                                         | AWTEvent.KEY_EVENT_MASK;
 protected long startDelay;
 private Toolkit toolkit;
 private long lastUserActionTime;
 private AWTEventListener listener;
 private StartTask startTask;
 private Timer sheduleTimer;
 private boolean alreadyRegistered = false;

 public ScreenSaverManager(long startDelay) throws AWTException
 {
   if(startDelay <= 0)
     throw new IllegalArgumentException("Start delay must be > 0");


   this.startDelay = startDelay;
   this.listener = new KeyMouseListener();
   this.toolkit = Toolkit.getDefaultToolkit();
   sheduleTimer = new Timer(true);
 }

 public synchronized void register()
 {
   if(!alreadyRegistered)
   {
     toolkit.addAWTEventListener(listener, AWT_EVENT_MASK);
     listener.eventDispatched(null);

     if(startTask != null)
       startTask.cancel();
     startTask = new StartTask();
     sheduleTimer.schedule(startTask, 1000, 1000);
   }
 }

 public synchronized void unregister()
 {
   toolkit.removeAWTEventListener(listener);
   alreadyRegistered = false;
   startTask.cancel();
   startTask = null;
 }

 public long getStartDelay()
 {
   return startDelay;
 }

 public void setStartDelay(long startDelay)
 {
   this.startDelay = startDelay;
 }

 private class KeyMouseListener implements AWTEventListener
 {
   public void eventDispatched(AWTEvent event)
   {
     lastUserActionTime = System.currentTimeMillis();
   }
 }

 private class StartTask extends TimerTask
 {
   public void run()
   {
     if( (System.currentTimeMillis() - lastUserActionTime) > startDelay)
     {
       //Запускаем ScreenSaver
     }
   }
 }
}


Это сообщение отредактировал(а) LSD - 20.1.2005, 19:59


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AntonSaburov
Дата 20.1.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Я тут довел пример до логического конца. Если 10 секунд ничего не делать, то на консоль будет выкидываться сообщение
"Start ScreenSaver". Если что-то нажать, то вывод прекратится.

Код

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;


public class ScreenSaverManager
{
public static final long AWT_EVENT_MASK = AWTEvent.MOUSE_WHEEL_EVENT_MASK
                                        | AWTEvent.MOUSE_MOTION_EVENT_MASK
                                        | AWTEvent.MOUSE_EVENT_MASK
                                        | AWTEvent.KEY_EVENT_MASK;
protected long startDelay;
private Toolkit toolkit;
private long lastUserActionTime;
private AWTEventListener listener;
private StartTask startTask;
private Timer sheduleTimer;
private boolean alreadyRegistered = false;

public ScreenSaverManager(long startDelay) throws AWTException
{
  if(startDelay <= 0)
    throw new IllegalArgumentException("Start delay must be > 0");


  this.startDelay = startDelay;
  this.listener = new KeyMouseListener();
  this.toolkit = Toolkit.getDefaultToolkit();
  sheduleTimer = new Timer(true);
}

public synchronized void register()
{
  if(!alreadyRegistered)
  {
    toolkit.addAWTEventListener(listener, AWT_EVENT_MASK);
    listener.eventDispatched(null);

    if(startTask != null)
      startTask.cancel();
    startTask = new StartTask();
    sheduleTimer.schedule(startTask, 1000, 1000);
  }
}

public synchronized void unregister()
{
  toolkit.removeAWTEventListener(listener);
  alreadyRegistered = false;
  startTask.cancel();
  startTask = null;
}

public long getStartDelay()
{
  return startDelay;
}

public void setStartDelay(long startDelay)
{
  this.startDelay = startDelay;
}

private class KeyMouseListener implements AWTEventListener
{
  public void eventDispatched(AWTEvent event)
  {
    lastUserActionTime = System.currentTimeMillis();
  }
}

private class StartTask extends TimerTask
{
  public void run()
  {
    if( (System.currentTimeMillis() - lastUserActionTime) > startDelay)
    {
      System.out.println("Start ScreenSaver");
    }
  }
}

public static void main(String[] args)
{
  ScreenSaverManager ssm;
  try {
    ssm = new ScreenSaverManager(10000);    
    ssm.register();
  }
  catch(Exception e) {
    e.printStackTrace();
    System.exit(0);
  }
  JFrame f = new JFrame();
  f.setBounds(100,100,500,500);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
}
}

PM MAIL WWW ICQ   Вверх
Zandr
Дата 26.1.2005, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



Тока это не SystemIdleTime, а ApplicationIdleTime...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1247 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.