Visualização do estado de uma Thread num JTextField

4 respostas
T

Boa noite!
Minha duvida é a seguinte:
Tenho duas threads e quero mostrar o estado dessas threads(RUNNABLE,TERMINATED…)
num JTextField.Quando uma thread mudar de estado seu valor deve ser
atualizado no seu JTextField.Como fazer?

4 Respostas

D

estuda ai esse codigo…

import java.awt.BorderLayout;
import java.lang.Thread.State;

import javax.swing.JFrame;
import javax.swing.JTextField;


public class Main {
	private static Main main = new Main();
	
	public static Main getInstance() {
		return main;
	}
	
	private class MyThreadOne implements Runnable {
		private State currentState;
		private Thread innerThread;
		
		public MyThreadOne() {
			innerThread = new Thread(this);
			innerThread.start();
		}
		
		@Override
		public void run() {
			currentState = Thread.currentThread().getState();
			statusOne.setText(currentState.toString());
			while(true) {
				State state = Thread.currentThread().getState();
				if (!currentState.equals(state)) {
					currentState = state;
					statusOne.setText(state.toString());
				}
			}
		}
	}
	
	private class MyThreadTwo extends MyThreadOne {
		private State currentState = null;
		
		public MyThreadTwo() {
			super();
		}
		
		@Override
		public void run() {
			currentState = Thread.currentThread().getState();
			statusTwo.setText(currentState.toString());
			while(true) {
				State state = Thread.currentThread().getState();
				if (!currentState.equals(state)) {
					currentState = state;
					statusTwo.setText(state.toString());
				}
			}
		}
	}
	
	private JFrame frame;
	private JTextField statusOne;
	private JTextField statusTwo;
	
	private MyThreadOne oneThread;
	private MyThreadOne twoThread;
	
	private Main() {
		initComponents();
		oneThread = new MyThreadOne();
		twoThread = new MyThreadTwo();
	}
	
	private void initComponents() {
		frame = new JFrame("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		statusOne = new JTextField();
		statusTwo = new JTextField();
		frame.setLayout(new BorderLayout());
		frame.add(statusOne, BorderLayout.NORTH);
		frame.add(statusTwo, BorderLayout.SOUTH);
		frame.pack();
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		Main.getInstance();
	}
}
T

blz,o exemplo melhorou um pouco.
poderia postar um codigo no qual um jbutton colocaria uma das threads para dormir e
que essa mudança fosse mostrada no JtextField?

D

é so adicionar um button no frame

depois tu adciona um evento nele, para quando o butão for pressionado, a thread dar um sleep ou interrupt

T

Eu tentei mas mesmo assim o jTextField nao mostra.

public void actionPerf(ActionEvent e) {
//Thread b=new Thread(oneThread);

try {
           
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);    
        }  
    }

     .....

        but.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            actionPerf(e);
        }
            
        });
Criado 6 de julho de 2012
Ultima resposta 7 de jul. de 2012
Respostas 4
Participantes 2