2015-03-07 3 views
0

Попытка прекратить нить, а затем начать новую, однако, когда я иду, чтобы начать новую нить после того, как она, возможно, избавится от другой, она выдает IllegalThreadStateException. Любая помощь будет принята с благодарностью, поскольку я как бы новичок в этой теме. Спасибо.Illegal Thread State Exception при запуске новой нити

public class Start_btn_Listener extends JButton implements ActionListener { 
/* 
* ActionListener for the Start button in which starts the pendulum animation by creating a new thread. 
*/ 

static volatile Thread p =new Thread(GUI.shm_panel); 







@Override 
public void actionPerformed(ActionEvent e) { 

    if(!GUI.GetRunning()){ // Determines whether a thread of Pendulum_Swing is already running. 
    p.start(); 
    GUI.running = true; 
    } 
    else{ 
     JLabel message = new JLabel("Pendulum is already running"); 
     Object[] options = {"OK"}; 
     final JOptionPane pane = new JOptionPane(message, JOptionPane.ERROR_MESSAGE, JOptionPane.OK_OPTION, null, options); 
     JDialog dialog = pane.createDialog(GUI.shm_panel, "Running"); 
     message.requestFocus(); 
     dialog.setVisible(true); 
     /* 
      * Displays an error message when the Start button is clicked but the pendulum is still going. 
      * Longer than usual to remove the focus border from the OK button as it always bugs me. 
      */ 

    } 

} 
public static Thread GetThread(){ 
    return p; 
} 
} 
+1

Вы не можете перезапустить существующую тему. Вам нужно создать «новый» поток, а затем запустить этот поток. – camickr

+1

'GetThread()' .. 1) Пожалуйста, изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'UPPER_CASE_CONSTANT') и использовать ее последовательно. 2) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Самостоятельный, правильный пример). –

+0

Итак, где бы я создал новую тему? – pepper

ответ

0

Вы начинаете свой р нить снова нравится:

p.start(); 

на определенное событие. Вы не можете запустить уже запущенный, т. Е. Запущенный или закрытый поток.

Вы должны были бы сделать что-то вроде:

p =new Thread(GUI.shm_panel); 
p.start(); 
+0

Когда я делаю это, когда p.start() исключение не выбрасывается, но я не вижу новый поток, сделанный – pepper

Смежные вопросы