Пожалуйста, посмотрите на следующий кодНевозможно обновить JDialog GUI внутри нити
private class EmergencyAlertNotifier implements Runnable, ActionListener
{
JDialog dialog = new JDialog();
int number=0;
JLabel message;
JButton yes,no;
String messageStr;
public EmergencyAlertNotifier()
{
dialog.setLayout(new BorderLayout());
//The JLabel which will display the number of seconds left
//before alerting emergency services
message = new JLabel();
messageStr="number";
yes = new JButton("OK");
yes.addActionListener(this);
no = new JButton("Cancel");
no.addActionListener(this);
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
btnPanel.add(yes);
btnPanel.add(no);
dialog.add(message,"Center");
dialog.add(btnPanel,"South");
dialog.setTitle("Ready To Notify Emergency Fire Services");
dialog.setVisible(true);
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
@Override
public void run()
{
for(int i=10;i>0;i--)
{
message.setText(messageStr+i+" Sec.");
try
{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==yes)
{
}
else
{
dialog.dispose();
}
}
}
Thread запускается вне указанного класса
new Thread(new EmergencyAlertNotifier()).start();
Я пытаюсь обновить JLabel с изменением числа внутри потока. Но вместо этого JLabel не подходит к графическому интерфейсу. Почему это? Пожалуйста помоги!
Прежде всего, никогда, никогда не создавать, изменять или взаимодействовать с любым компонентом пользовательского интерфейса из любого другого потока События Диспетчерской Thread, проверить [Параллелизм в свинге] (http://docs.oracle.com/ javase/tutorial/uiswing/concurrency/index.html) для более подробной информации. Во-вторых, я не вижу там, где вы начинаете поток, так что вы уже выполняете его в контексте EDT, что означает, что вы его блокируете, не позволяя обновлять UI. – MadProgrammer
@MadProgrammer: Спасибо за ответ. Пожалуйста, взгляните на редактирование –
ОК, мне удалось решить проблему. Спасибо всем за ответы :) –