t.isStopped()
에 대한 액세스를 run()
오버라이드하지만 다음과 같은 오류가 발생합니다.ActionListener에서 override() 메소드를 호출하십시오.
내가 최종 변수
로컬 변수 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를 다시 클릭 할 때 타이머가 작동하지 않게하려면 ... 다른 방법이 있습니까?
응답 라인 또는 오류를 표시 줄의 코드는 무엇입니까? –
이 오류가 발생한 줄은 무엇입니까? t.setIsRunning (true) 인 경우 t를 this로 바꾸어보십시오. –
은 t가있는 run 메소드의 모든 행에서 ... t를이 코드로 대체하면 코드에 아무런 영향을주지 않습니다. –