Wii リモコンを使用しているときに Java コードに問題があります。私の状況は、「ボタン A を押すと、ボタン A を離すまで画面に何か (私の場合は生の加速度) を出力する」ということです。そのため、数日間の検索の後、TimerTask と Timer を使用してタスクを実行します。生の加速度を出力しました。しかし、ボタンAを離した後、印刷を停止できません。これが私のコードです:
public class TestTimerTask implements WiimoteListener {
public RawAcceleration rawacc;
public static void main(String[] args){
Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(1, true);
Wiimote wiimote = wiimotes[0];
wiimote.activateMotionSensing();
wiimote.toString();
wiimote.addWiiMoteEventListeners(new TestTimerTask ());
}
@Override
public void onButtonsEvent(WiimoteButtonsEvent wbe) {
boolean check = false;
Timer timer = new Timer();
TaskNeedToDo task = new TaskNeedToDo();
if(wbe.isButtonAJustReleased()){
System.out.println("Button A Just Released");
task.setCheck(false);
task.cancel();
timer.cancel();
}
if(wbe.isButtonAJustPressed()){
// check = false;
try {
System.out.println("Button A Just Pressed");
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:sss");
Date temp = new Date (System.currentTimeMillis());
Date now = dateFormatter.parse(dateFormatter.format(temp));
int period = 300;
task.setCheck(true);
task.setRawAcc(rawacc);
timer.schedule(task, 0, period);
} catch (ParseException ex) {
System.out.println("Error when take current time");
}
}
if(wbe.isButtonBHeld())
WiiUseApiManager.shutdown();
}
@Override
public void onIrEvent(IREvent ire) {
System.out.println("onIrEvent oocur");
}
@Override
public void onMotionSensingEvent(MotionSensingEvent mse) {
rawacc = mse.getRawAcceleration();
}
class TaskNeedToDo extends TimerTask {
private boolean check;
private RawAcceleration value;
public boolean getCheck(){
return check;
}
public void setCheck(boolean check){
this.check = check;
if(check == false)
this.cancel();
}
public RawAcceleration getRawAcc(){
return value;
}
public void setRawAcc(RawAcceleration value){
this.value = value;
}
@Override
public void run() {
if(check == false)
this.cancel();
System.out.println(value);
System.out.println(check);
}
}
結果は次のとおりです。
Button A Just Pressed
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148)
true
Button A Just Released
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148)
true
Raw acceleration : (14, 115,148
true
チェックはまだ真であるため、停止することはできません:(助けてくれてありがとう:D