У меня есть код, который содержит следующий повторяющийся паттерн:отбрасывая события клавиатуры между последовательными вызовами для ввода (MATLAB)
- Ask пользователя нажать ⏎ начать вычисление (с использованием
input
). - Выполнение некоторых длительных вычислений и отображение информации пользователю.
- Ждите, пока пользователь нажмет ⏎ еще раз, чтобы перейти к дальнейшим вычислениям.
Проблема я столкнулся:, если пользователь нажимает клавишу Return/Enter более/⏎ чем один раз после того, как появится приглашение на 1 й (предположительно по ошибке), эти прессы перехватываются следующими подсказками который заставляет остальную часть кода выполнять.
Желаемое поведение: Я хотел бы отказаться от любого количества событий клавиатуры происходит после того, как акцепт приглашения и до появления следующего одного, так что вычисление не происходит без явного взаимодействия с пользователем с каждый быстрое решение.
код, который воспроизводит проблему:
function q34593155()
%% // Init
clc;
import java.awt.Robot; import java.awt.event.*; robot = Robot;
%% // 1st prompt:
disp('--- Some initial info the user should see ---');
[~] = input('\nPress "Return" to start phase 1.\n','s');
disp('Please wait while computation is running...');
%// Here we simulate an additional press:
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
pause(2);
disp('--- results of the 1st part ---');
%% // 2nd prompt:
[~] = input('\nPress "Return" to start phase 2.\n','s');
disp('Please wait while computation is running...');
%//^Should only happen after another explicit press on "Enter"');
pause(2);
disp('--- results of the 2nd part ---');
Инструкции: либо нажать "Enter" сразу на 1 й строке или закомментируйте robot.keyPress
и robot.keyRelease
и нажмите два раза (или больше).
Немного по теме, но альтернативой может быть использование диалогового окна. 'message = sprintf ('нажмите ok'); uiwait (MsgBox (сообщение)); '. Мышь-робот не всегда смешная, но в случае, если вы действительно хотите дождаться взаимодействия с пользователем, это приятно. – patrik
@patrik - Как вы сказали, ваша идея решает несколько другую проблему (когда взаимодействие с мышью требуется/возможно). Если пользовательские взаимодействия и обновления статуса кода происходят в отдельном окне, можно было бы иметь цифру с кнопкой «Далее» (например, пользовательский «msgbox») и установить фокус на кнопку, но при этом отключить кнопку, если она не должна быть осязаемым ... Хотя, я действительно не знаю, если так вы можете отказаться от нежелательных событий клавиатуры (когда кнопка снова станет осязаемой) ... Не могли бы вы объяснить, как вы собираетесь использовать робота мыши в этом случае? (нажмите кнопку на клавиатуре нажмите?) –
Я хочу сказать, что робот все еще можно использовать, даже если вы покидаете компьютер или из командной строки с опцией -nosplash. Точно так же нельзя доверять роботу для перемещения мыши (нажать «ОК»). Я не имел в виду столько комментариев с моим комментарием, что это был еще один способ решить проблему взаимодействия с пользователем, сохраняя при этом клавиатуру открытой для ввода. Он был опубликован как комментарий, поскольку он не был ответом на ваш вопрос, но все же может быть полезен для связанных с этим проблем. – patrik