Inserir ObjectOutPutStream em um JLabel

Não consigo fazer um JLabel receber a captura de um ObjectInputStream.
Podem me ajudar!!!

public void recebeTexto(JLabel img_text) {

    new Thread() {
         
       @SuppressWarnings("resource")
	public void run() {
    	   
    	 
	   try{  

in = new ObjectInputStream(socket.getInputStream());
System.out.println(“lendo socket do servidor”);

			System.out.println(in.readObject()); //esse imprime

				img_text.setText(in.readObject().toString()); //esse não imprime

Provavelmente só tem um objeto pra ser lido no seu InputStream mas você está tentando ler um segundo objeto, afinal, está chamando o in.readObject() duas vezes.

Utilize uma variável local para armazenar o objeto lido.

in = new ObjectInputStream(socket.getInputStream());
System.out.println("lendo socket do servidor");

Object objetoLido = in.readObject();

System.out.println(objetoLido); //esse imprime

img_text.setText(objetoLido.toString()); //esse exibe no JLabel

top…vcs são fera brother…
Agradeço a família GUJ…
até mais!!!

1 curtida

agora me encontro em outro problema…
estou tentando lançar um label em um JList…
acontece o mesmo problema acima…
alguma parte se renova e não consigo perceber…

tenho este método que traz a imagem e o email do banco

public static JList exibiImageList(byte[] minhaimagem,String email, javax.swing.JList label) throws IOException
{

	   DefaultListModel<Object> list = new  DefaultListModel<Object>();
	   InputStream input = new ByteArrayInputStream(minhaimagem);

            	 BufferedImage imagem = ImageIO.read(input);
                 ImageIcon icon = new ImageIcon(imagem);	
                 Image img = icon.getImage().getScaledInstance(25, 25, 25);
                 list.addElement(new ImageIcon(img));
             	 list.addElement(email);
				
				 label.setModel(list);
    	
          
        
				 return label;
           
		
}

e chamo este método assim por um botão:

Chat_Dao dao = new Chat_Dao();

        	        ArrayList<Cliente> cliente = new ArrayList<Cliente>();
        			
        			cliente = (ArrayList<Cliente>) dao.BuscarTodos();	
	
			
	              for(Cliente cli : cliente) {
					
						
						try {
							ManipularImagem.exibiImageList(cli.getImagem(),cli.getEmail(), Cliente_Principal.list);
						} catch (IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
				
			}

parece carma…só aparece o ultimo registro…
ja rodei tudo e nada…
por favor me ajudem…
estou com prazo para este projeto…vlwwwww

É que a cada chamada ao método exibiImageList você está setando um novo ListModel para o seu JList.

tinha reparado ontem.
será que posso fazer assim:

public static JList exibiImageList(byte[] minhaimagem,String email, javax.swing.JList label, ```
DefaultListModel list) throws IOException
{

Executou de boa…ontem eu levei esse método para outra classe e
coloquei a variável no topo e funcionou…
vlw meu brother…obrigado.

o grande problema que encontrei foi a posição da imagem com as
Strings do banco.Não tem como adicionar 2 elementos na mesma posição
do JList, só assim:

  list.addElement(String);
 list.addElement(imagem);

Tem sim, pra isso você precisa implementar um ListCellRenderer.

sim…oque eu consegui só manda a mesma imagem para todos os emails

pode me ajudar com isso.
eu usei ese método:

public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {

tem como usar outra maneira???

Posta o código completo de suas classes, não tem como adivinhar a forma que você implementou.

public class ActionListCellRenderer implements ListCellRenderer {

@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {

//aki não consigo trazer imagem do banco só por URLs
JLabel label= new JLabel());

//Define o texto do JLabel
label.setText(value.toString());

// if(isSelected)
// label.setHorizontalAlignment(SwingConstants.CENTER);
// else
label.setHorizontalAlignment(SwingConstants.LEFT);

//Retorna o Label
return label;
}

}

Ao invés de ficar adicionando String, faz o seu JList renderizar sua coleção de objetos Cliente.

Sugiro utilizar seu próprio ListModel para isso, DefaultListModelsó é legal para conteúdo estático.

Aí no seu renderer o parâmetro value vai ser um objeto do tipo Cliente e você vai obter a imagem dele.

tipo assim?
ListModel lista = new ListModel() {

	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Cliente getElementAt(int index) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void addListDataListener(ListDataListener l) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void removeListDataListener(ListDataListener l) {
		// TODO Auto-generated method stub
		
	}
};


 //JList
 list = new JList<Cliente>(lista);

a imagem fica assim

Captura%20de%20tela%20de%202021-10-08%2015-03-48

o problema disso é que a imagem vem como BINARY DATA
e eu converto ela num método!!!e agora???

Como está implementado o seu Renderer?
Provavelmente você precisa setar o preffered-size do componente utilizado para renderizar a imagem.