Conseguir capturar todos os eventos do SO

2 respostas
H

:?: Olá!

O java consegue capturar todos os eventos do SO?
A api do java tem alguma classe pra tratar os eventos do SO?
Ou tenho que fazer isso através de rotinas JNI?
Não é só eventos de interface que eu preciso (AWT), e sim, vários tipos.
Por exemplo, ficar monitorando um diretório, uma porta, etc,
sem ter que ficar sempre lendo para saber se houve uma mudança. Quando
o SO ler, gravar, deletar um arquivo, eu saberia quando isso estaria ocorrendo
através dos eventos (mensagens) do SO, sem ter que ficar verificando.

Referente a eventos, encontrei uma página na net, que indicava uma falha
na captura dos eventos do mouse no javascript (sei que não tem nada a vê
com o java, mas queria saber se isso pode acontecer no java também ou se é
uma falha do SO ou do gerenciador de eventos, etc).
Existem páginas que colocaram um controle de segurança, para não permitir que
o usuário copiase o fonte do site, se o usuário clicase com o botão direito do
mouse sobre a página pra visualizar o fonte, apareceria uma mensagem impedindo
o usuário de visualizar o fonte do site, mas se clicase várias vezes com o botão
direito do mouse e bem rápido, o gerenciador de eventos não conseguia capturar todos
os eventos, permitindo que o usuário acessase o fonte do site. Isso pode ocorrer
no java? Não que eu queira bloquear a visualização de fonte de algum site, mas se
fosse ficar monitorando um diretório pelos eventos por exemplo, não poderia haver
falha, ou seja, não poderia deixar escapar nenhum evento. Isso é um problema do
gerenciador de eventos ou do SO?

Agradeço a atenção de todos,

Junior
Blumenau - SC

2 Respostas

T

Bom, vou falar do que conheço (que é o Windows)

  • Tem várias coisas que podem ser monitoradas usando-se um programa em C++ acessando as APIs do Windows, mas mesmo em C++ não são fáceis de fazer. (É claro que o .NET simplificou um monte as coisas: por exemplo, a parte de monitoração de diretórios foi encapsulada em uma classe System.IO.FileSystemWatcher em vez de ter de usar as APIs FindFirstChangeNotification, ReadDirectoryChangesW etc.)
  • Para uma boa parte dessas coisas, o Java não tem uma função equivalente, e você tem de fazer as coisas “na unha”, ou seja: no caso de monitorar o diretório, ou você escreve algum código JNI que chama as APIs mencionadas, ou então usa o método do JBoss - fica listando o diretório de tempos em tempos, e se o conteúdo do diretório mudou, então toma uma ação.
pcalcado

JNI é a chave para 99.999% das dúvidas deste tipo.

Ao optar por portabilidade você perde alguns benefícios do acoplamento ao SO.

Quando você fala de eventos do SO, de qual fala? Se houvesse algo mais ou menos padronizado [não sei se POSIX define algo tão alto nível assim, mas de qualquer modo não são todos os SOs que seguem POSIX], certamente haveria como manter a portabilidade, como acontece com alguma coisa em gerência de processos.

O jeito ‘java’ de fazer as coisas segue o que o thingol falou. Loops e busywaits…

[]s

Criado 14 de setembro de 2004
Ultima resposta 14 de set. de 2004
Respostas 2
Participantes 3