Несколько раз в день я наблюдаю несколько событий касания одновременно, тогда как я касаюсь только одним пальцем в одном месте.
Эти касания всегда вертикальные = почти одинаковая X-координация, но большая площадь в Y-координации. Я использую разрешение 1920x1080.
Я пробовал 2 разных сенсорных монитора, но одинаковое поведение - оба iiyama T2235MSC-B1. Я написал сенсорное приложение на C ++, чтобы проверить мой сенсорный экран, но в C ++ все нормально, такого поведения нет. Только в Java FX. Я использую OpenJDK 11.0.2 и Windows 10.
Каждый раз, когда это происходит, только когда я касаюсь экрана. Есть ли в JavaFX кэш для событий касания, который не очищен должным образом? Вы тоже это наблюдали? Что я могу сделать? Это showtopper для всего моего приложения в производстве.
Проблема начинается с
[DEBUG] 2019-03-01T12:03:38.740+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_PRESSED target button - ID fastB1, classes button keyboardBtn fastB1Style
[DEBUG] 2019-03-01T12:03:38.740+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 1, touchPoint count = 1, point = [1163.0, 77.0]
[DEBUG] 2019-03-01T12:03:38.740+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 77.0], state = PRESSED
[DEBUG] 2019-03-01T12:03:38.741+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_PRESSED target button - ID fastB2, classes button keyboardBtn fastB2Style
[DEBUG] 2019-03-01T12:03:38.741+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 2, touchPoint count = 2, point = [1153.0, 148.0]
[DEBUG] 2019-03-01T12:03:38.741+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 77.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.741+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1153.0, 148.0], state = PRESSED
...
Многие другие события происходят один за другим, приблизительно до 8 стационарных событий в один:
[DEBUG] 2019-03-01T12:03:38.745+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 77.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.745+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1153.0, 148.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.745+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 239.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 314.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1159.0, 413.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 482.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1154.0, 539.0], state = PRESSED
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_PRESSED target button - ID null, classes button keyboardBtn
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 8, touchPoint count = 8, point = [1150.0, 975.0]
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 77.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1153.0, 148.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.746+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 239.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.747+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 314.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.747+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1159.0, 413.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.747+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 482.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.747+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1154.0, 539.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.747+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1150.0, 975.0], state = PRESSED
[DEBUG] 2019-03-01T12:03:38.806+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_RELEASED target button - ID fastB1, classes button keyboardBtn fastB1Style
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 18, touchPoint count = 8, point = [1163.0, 77.0]
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 77.0], state = RELEASED
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1153.0, 148.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1163.0, 239.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 314.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1159.0, 413.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 482.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1154.0, 539.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.807+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1150.0, 975.0], state = STATIONARY
...
и затем начинается уменьшение по одному:
[DEBUG] 2019-03-01T12:03:38.812+01:00 [JavaFX Application Thread] (BaseScene.java:197) - TOUCH_RELEASED No target/parent button/label - target is javafx.scene.control.TextField
[DEBUG] 2019-03-01T12:03:38.812+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 23, touchPoint count = 3, point = [1160.0, 482.0]
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1160.0, 482.0], state = RELEASED
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1154.0, 539.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1150.0, 975.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_RELEASED target button - ID null, classes button lightGreen2 keyboardBtn
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 24, touchPoint count = 2, point = [1154.0, 539.0]
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1154.0, 539.0], state = RELEASED
[DEBUG] 2019-03-01T12:03:38.813+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1150.0, 975.0], state = STATIONARY
[DEBUG] 2019-03-01T12:03:38.840+01:00 [JavaFX Application Thread] (BaseScene.java:193) - TOUCH_RELEASED target button - ID null, classes button keyboardBtn
[DEBUG] 2019-03-01T12:03:38.841+01:00 [JavaFX Application Thread] (BaseScene.java:214) - - touchEvent - setID = 30, touchPoint count = 1, point = [1151.0, 975.0]
[DEBUG] 2019-03-01T12:03:38.841+01:00 [JavaFX Application Thread] (BaseScene.java:216) - --> point: [1151.0, 975.0], state = RELEASED
EDIT:
Я хотел бы добавить, что я использую этот код для привязки EventHandler:
getScene().setOnTouchPressed(this);
getScene().setOnTouchReleased(this);
Тогда этот метод называется:
@Override
public void handle(InputEvent e) {
handleEvent(e);
}
private void handleEvent(InputEvent e) {…}
Точка касания повторяется (для регистрации) следующим образом:
if (e instanceof TouchEvent) {
TouchEvent te = ((TouchEvent) e);
INPUT_EVENTS_LOGGER.debug("- touchEvent - setID = " + te.getEventSetId() + ", touchPoint count = " + te.getTouchCount() + ", point = [" + te.getTouchPoint().getScreenX() + ", " + te.getTouchPoint().getScreenY() + "]");
for (TouchPoint tp : te.getTouchPoints()) {
INPUT_EVENTS_LOGGER.debug("--> point: [" + tp.getScreenX() + ", " + tp.getScreenY() + "], state = " + tp.getState().name());
}
}