Слушатель события в Java без фокусирующегося приложения? (Глобальное обнаружение нажатия клавиши)

В переменной position хранится номер события, который вы хотите заменить. Как и в вашем случае, вы пытались заменить 5-й, поэтому теперь он сохраняется как 5.

    Pattern p = Pattern.compile("#");
    Matcher m = p.matcher(chart);
    int count = 0;
    int position = 5;
    int index = 0;
    while (m.find()) {
        count++;
        if (count == position - 1) {
            index = m.end();
        }
    }
    String regex = "([#\n]{" + index + "})(#)([#\\n]{1,})";
    chart = chart.replaceAll(regex, "$1/$3");
    System.out.println(chart);

То, что я делаю здесь, это сначала я выясню, на каком символе заканчивается n-1 вхождение, и сохранил его в index . После этого в replaceAll [116 ] У меня есть регулярное выражение, которое группирует строку из трех частей: одна перед заменяемым символом, следующая группа содержит только один символ, который является n-ым вхождением, а последняя группа содержит оставшиеся. $1/$3 означает замену всей строки на group1 , затем / и затем group3 .

19
задан Ross 29 April 2009 в 14:07
поделиться

2 ответа

It's my understanding that this can't be done. At a fundamental level, the JVM only generates events for O/S events it receives, and it only receives O/S input events when it has focus.

I am sure you could use JNI to trigger the O/S to generate events for all input, but that would be very O/S dependent.

11
ответ дан 30 November 2019 в 04:16
поделиться

I'm not aware of any way to get around that either. I did find this link on Java's forums with a good example of how to setup the JNI stuff and make a global keyboard handler (too much to add here). It's a little dated (2005), but the example looks thorough enough to get you started.

2
ответ дан 30 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: