t.isStopped()
オーバーライドされたメソッドにアクセスしたいのですrun()
が、次のエラーが発生します。
別のメソッドで定義された内部クラス内で非最終変数 t を参照することはできません
t を最終変数に設定すると
ローカル変数 t が初期化されていない可能性があります
<!-- language: java -->
jHibernateCheckBox = new JCheckBox("Sleep / Hibernate after ");
jHibernateTextField = new JTextField("240");
jHibernateCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
StoppableThread t = new StoppableThread() {
@Override
public void run() {
t.setIsRunning(true);
long timestamp = new Date().getTime();
int minutes = Integer.parseInt(jHibernateTextField.getText());
long secounds = minutes * 60;
long millisecounds = secounds * 1000;
long elapsedTime = new Date().getTime();
do {
try {
Thread.sleep(1000);
millisecounds -= new Date().getTime() - elapsedTime;
secounds = millisecounds / 1000;
if(secounds < 60) {
jHibernateTextField.setText("" + secounds);
jRemainingLabel.setText(" secounds remaining");
}
else {
jHibernateTextField.setText("" + secounds / 60);
jRemainingLabel.setText(" minutes remaining");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
elapsedTime = new Date().getTime();
}while(!t.isStopped() && timestamp + minutes * 60 * 1000 > new Date().getTime());
jHibernateTextField.setText("" + minutes);
if(t.isStopped()) return;
else {
console.out("Computer wird schlafen gelegt =)");
//Hibernate (siehe LAPTOP)
}
}
};
Thread thread = new Thread(t);
if(jHibernateCheckBox.isSelected()) {
jHibernateTextField.setEnabled(false);
thread.start();
}
else {
jHibernateTextField.setEnabled(true);
t.setIsStopped(true);
}
}
});
内部クラスで変数 t にアクセスすることは可能ですか、またはチェックボックスが再度クリックされた場合にスレッドを停止する方法を知っている人はいますか?
jHibernateCheckBox をもう一度クリックしたときにタイマーの動作を停止したいだけです...別の方法がありますか?