У меня возникла проблема в том, что я не могу понять, почему статическая переменная другого класса внутри внутреннего класса, реализующего ActionListener, не отображается в основном тестовом файле.Статическая переменная не может быть установлена внутри внутреннего класса
Ниже приведены три файла, с которыми у меня возникает проблема. Ожидаемое действие изменения статического символа переменной в классе проверки должно завершать программу, но это не так.
InnerClassTest File(Main class file)
package innerClass;
public class InnerClassTest
{
public static void main(String[] args)
{
TalkingClock clock = new TalkingClock(2000, true);
clock.start();
while(true)
{
if(Verification.flag == true)
{
System.exit(0);
}
if (TalkingClock.flag == true)
{
System.exit(0);
}
}
}
}
package innerClass;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
public class TalkingClock
{
private int interval;
private boolean beep;
public static boolean flag = false;
public TalkingClock(int interval, boolean beep)
{
this.interval = interval;
this.beep = beep;
}
public void start()
{
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval, listener);
t.start();
}
public class TimePrinter implements ActionListener
{
@Override
public void actionPerformed(ActionEvent event)
{
Date now = new Date();
System.out.println("At the tone, the time is " + now);
if (beep) Toolkit.getDefaultToolkit().beep();
Verification.flag = true;
flag = true;
}
}
}
package innerClass;
public class Verification
{
public static int count = 0;
public static boolean flag = false;
}
Важно, чтобы вся соответствующая информация для вопроса находилась в вопросе, а не только в ссылках. Пожалуйста, сохраните этот код в вопросе. – 4castle
Ваш код многопоточен (с помощью таймера) и не синхронизирован должным образом. Нет никаких оснований ожидать, что один поток увидит любые записи, выполненные другим. –
Попробуйте сделать флаг изменчивым. – shmosel