Java: возвращаемое значение Leap Motion из пустоты

Я пытаюсь заставить свой код прокручиваться вверх в диапазоне от 0 до 255, используя Leap Motion (поэтому печатает: 1, затем 2, затем 3 на кругах по часовой стрелке и 3, 2, 1 на кругах по часовой стрелке).

Действия жеста находятся в методе void onFrame().

Мне нужно увеличивать число каждый раз, когда обнаруживается круговой жест, и выводить каждое число. В нынешнем виде мой код выполняет приращение в фоновом режиме и подсчитывает только тогда, когда я ввожу цифру (поэтому моя подсчитанная цифра отображается во втором приглашении). Это плохо, потому что пользователь на самом деле не может видеть, какое число он фиксирует в подсказке порога.

Пожалуйста, помогите, я новичок в этом, и это замедляет мой проект!

Я предоставил урезанные классы, чтобы выделить проблему.

Класс слушателя:

public class ImageJListener extends Listener {

public Robot robot;

public int promptValue;
// potentially look into atomic objects and non atomic objects in case this has a threading issue
public ImageJListener() {
    this.promptValue = 0;
}

public int getPromptValue() {
    return this.promptValue;
}

...

public int onFrame(Controller controller) {
    com.leapmotion.leap.Frame frame = controller.frame();

    for (Gesture gesture : frame.gestures()) {
        if (gesture.type() == Type.TYPE_CIRCLE) {
            CircleGesture circle = new CircleGesture(gesture);
            if (circle.pointable().direction().angleTo(circle.normal()) <= Math.PI / 4) {


                promptValue++;
                return promptValue;


            } else {

                promptValue--;
                return promptValue;

            }

        } else if (gesture.type() == Type.TYPE_KEY_TAP) {
            KeyTapGesture Tap;
            Tap = new KeyTapGesture(gesture);

            try {
                Robot robot = new Robot();
                robot.keyPress(KeyEvent.VK_ENTER);
                robot.keyRelease(KeyEvent.VK_ENTER);
            } catch (AWTException awt) {
            }
        }
    }
}

}

Класс плагина (который вызывает переменную promptValue для заполнения подсказки:

    IJ.setRawThreshold(imp, IJ.getNumber("prompt", (listener.getPromptValue())), IJ.getNumber("prompt", (listener.getPromptValue())), null);

Спасибо заранее,

Райан


person Ryan Brookes    schedule 26.07.2016    source источник


Ответы (1)


Возврат значения из OnFrame() не поможет. OnFrame вызывается кодом Leap Motion, и он ничего не сделает со значением, даже если бы вы могли его указать. Что вам нужно, так это функция для изменения значения подсказки на месте, если это вообще возможно. Затем OnFrame может вызвать эту функцию.

person Charles Ward    schedule 26.07.2016
comment
Я думал об использовании класса Observable для выкачивания обновлений — как вы думаете, это сократит его? - person Ryan Brookes; 01.08.2016
comment
Это кажется излишним для вызова одной функции, но если вы ожидаете, что вам нужно будет отправить больше данных, чем это единственное целое число, то, возможно, это стоит того. Однако я на самом деле не специалист по Java, поэтому с моей стороны было бы глупо давать вам рекомендации в стиле Java. - person Charles Ward; 03.08.2016