Mudar os atributos de um objeto que pertence a uma outra classe

4 respostas
R

Pessoal tenho um objeto que pertence a uma outra classe chamada Lampada e gostaria de poder alterar os atributos dele nessa classe do tipo Thread, mas como eu faço isso?

Abraços!!!

import javax.swing.*;

public class Thread_1 extends Thread{
	ImageIcon Lampada_apagada = new ImageIcon(getClass().getResource("lampada_apagada.png"));
	ImageIcon Lampada_acessa = new ImageIcon(getClass().getResource("lampada_acessa.png"));
	
	public void run(){
		
		try {
			
			while(true){
			System.out.println("Acender Lampada");
			Lampada.Lampada.setIcon(Lampada_acessa);//Objeto que pertence a outra classe chamada Lampada.
			Thread.sleep(5000);
			System.out.println("Apagar Lampada");
			Lampada.Lampada.setIcon(Lampada_apagada);//Objeto que pertence a outra classe chamada Lampada.
			Thread.sleep(5000);
			}
			
			} catch (Exception e) {
			System.out.println(e.getMessage());			
		}		
	}
}

4 Respostas

R

Dessa forma que esta não tá funcionando.

asousaj

Não sei como como é sua classe Lampada.

Mas pode passar a referencia ao objeto pelo construtor da classe Thread_1.
Declare a lampada;

ImageIcon Lampada_apagada = new ImageIcon(getClass().getResource("lampada_apagada.png"));
	ImageIcon Lampada_acessa = new ImageIcon(getClass().getResource("lampada_acessa.png"));
	Lampada lampada;

Receba lampada pelo construtor.

public Thread_1(Lampada lampada) {
		this.lampada = lampada;
	}

Depois use-a assim

while (true) { System.out.println("Acender Lampada"); lampada.setIcon(Lampada_acessa); Thread.sleep(5000); System.out.println("Apagar Lampada"); lampada.setIcon(Lampada_apagada); Thread.sleep(5000); }

Na sua main(ou outro lugar onde for inicializar a Thread_1) faça assim.

Lampada lampada = new Lampada(); 
		Thread t = new Thread_1(lampada);
		t.start();

Amigo tome cuidado para não queimar etapas durante teu aprendizado.
Não acho que convém usar thread antes de dominar coisas mais básicas(Basico linguagem Java, Escopos de váriaveis, OO, Encapsulamento…)

Bons estudos.

R

Beleza parceiro muito obrigado pela ajuda aí
essa é a minha classe que vai chama a minha thread.
tentei fazer da forma como vc falou,mas não deu certo.

import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;

public class Lampada extends JFrame {

	private JPanel contentPane;
	public static JLabel Lampada;
	public ImageIcon img1 = new ImageIcon(getClass().getResource("lampada_apagada.png"));
	public ImageIcon img2 = new ImageIcon(getClass().getResource("lampada_acessa.png"));
	
	public Lampada() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 302, 437);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setVisible(true);
		
		final JLabel Lampada = new JLabel("");
		Lampada.setIcon(new ImageIcon("C:\\JAVA\\Threads_piscar\\src\\Imagens\\lampada_apagada.png"));
		Lampada.setBounds(10, 0, 226, 300);
		contentPane.add(Lampada);
		
		JButton Botao_piscar = new JButton("Piscar");
		Botao_piscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {				
				Lampada.setIcon(img2);								
				Thread_1 acender = new Thread_1();
				acender.start();
		}		
		});
		Botao_piscar.setBounds(81, 321, 89, 23);
		contentPane.add(Botao_piscar);
	}
	}

e essa é o meu método principal.

import javax.swing.ImageIcon;


public class Principal {
	
public static void main(String[] args){
	
		new Lampada();
		
		System.out.println("Executando main");
	
	}

}

Abraços!!!

asousaj

Cara não trabalho com swing … to meio enrolado aqui mas dei uma alteradinha nas classes, testa ai … funfa

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class MyFrame extends JFrame {
	private static final long serialVersionUID = 8052092780671232341L;

	private MyFrame This = this;
	private JPanel contentPane;
	private final JLabel lampada;

	private ImageIcon img1;
	private ImageIcon img2;

	public MyFrame() {
		img1 = new ImageIcon("resources/lampada_desligada.png");
		img2 = new ImageIcon("resources/lampada_ligada.png");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 302, 437);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setVisible(true);

		lampada = new JLabel("");
		lampada.setIcon(img1);
		lampada.setBounds(10, 0, 226, 300);
		contentPane.add(lampada);

		JButton Botao_piscar = new JButton("Piscar");
		Botao_piscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Pisca pisca = new Pisca(This);
				Thread t = new Thread(pisca);
				t.start();
			}
		});
		Botao_piscar.setBounds(81, 321, 89, 23);
		contentPane.add(Botao_piscar);
	}

	public void apagar() {
		lampada.setIcon(img1);
	}

	public void acender() {
		lampada.setIcon(img2);
	}

	public static void main(String[] args) {
		new MyFrame();
	}
}
public class Pisca implements Runnable {
	private MyFrame myFrame;

	public Pisca(MyFrame myFrame) {
		this.myFrame = myFrame;
	}

	@Override
	public void run() {
		try {
			while (true) {
				System.out.println("Acender");
				myFrame.acender();
				Thread.sleep(1000);
				System.out.println("Apagar");
				myFrame.apagar();
				Thread.sleep(2000);
			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
Criado 27 de novembro de 2013
Ultima resposta 3 de dez. de 2013
Respostas 4
Participantes 2