Olá a todos
Editei o post antigo para que fique mais claro a minha duvida.
Estou trabalhando com Jnativehook e lendo o código da classe GlobalScreen percebi que ele cria uma Thread para cada evento disparado. Como posso fazer para pegar os dados e passar para uma variável que seja acessível de qualquer uma das novas threads que serão geradas. ou a unica solução e criar um arquivo texto?
Estou testando com arquivo texto mas sem sucesso devido as threads nem sempre estarem sendo executadas na ordem em que foram criadas. segue meu código atual `Texto pré-formatado public class EnterpretadorQRcode implements NativeKeyListener {
public static void main(String[] args) {
try {
Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
logger.setLevel(Level.OFF);
logger.setUseParentHandlers(false);
GlobalScreen.registerNativeHook();
} catch (NativeHookException e) {
System.err.print("Erro ao registrar");
System.err.println(e.getMessage());
System.exit(1);
}
GlobalScreen.addNativeKeyListener(new EnterpretadorQRcode());
}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
}
@Override
public void nativeKeyPressed(NativeKeyEvent e) {
try{
ArquivoTxt arquivoTxt = new ArquivoTxt();
switch (e.getKeyCode()) {
case NativeKeyEvent.VC_ENTER:
System.out.println(arquivoTxt.leitor());
break;
case NativeKeyEvent.VC_SPACE:
arquivoTxt.escritor(" ");
break;
case NativeKeyEvent.VC_SHIFT:
break;
case NativeKeyEvent.VC_ESCAPE:
default:
arquivoTxt.escritor(NativeKeyEvent.getKeyText(e.getKeyCode()));
break;
}
}catch ( IOException en ) {
}
}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
}
}
class ArquivoTxt {
private static final String caminho = "c:/tmp/file.txt";
public ArquivoTxt() {
File file = new File(caminho);
if ( file.exists() || file == null ){
System.out.println("Arquivo ja existe");
} else {
file = new File(caminho);
System.out.println("Arquivo criado");
}
}
public String leitor()throws IOException{
try{
ReversedLinesFileReader reader = new ReversedLinesFileReader(new File(caminho),StandardCharsets.UTF_8);
return reader.readLine();
}catch (IOException e) {
return null;
}
}
public void escritor(String letra) throws IOException{
BufferedWriter escritor = new BufferedWriter(new FileWriter(caminho));
escritor.write(letra);
escritor.close();
}
}