Porque as threads não são executadas?

2 respostas Resolvido
Thallysson

Olá, eu gostaria de saber porque as threads do meu código não são executadas? Eu gostaria de fazer com que as labels se mexessem nessas threads, mais elas nem mesmo são executadas, alguém pode me ajudar?

Código:
`

package Objects;

import java.awt.Image;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Passaro extends JFrame{
 Random rdm = new Random();
 boolean bo;
 int passquant; 
  Passaro(){
 setTitle("Título");
 setVisible(true);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 setLocationRelativeTo(null);
 setExtendedState(JFrame.MAXIMIZED_BOTH);
 setLayout(null);
 
  passquant = rdm.nextInt(9);
  for(int i = 0; i<=passquant; ++i){
   bo = rdm.nextBoolean();
   System.out.println(bo);
   if(bo==true){ 
 ImageIcon img = new ImageIcon(getClass().getResource("/Assets/pássaro-i.gif"));
 img.setImage(img.getImage().getScaledInstance(img.getIconWidth()-500,img.getIconHeight()-400, Image.SCALE_DEFAULT));
 int largura = img.getIconWidth();
 int altura = img.getIconHeight();
 JLabel p = new JLabel(img);
 p.setBounds(0,rdm.nextInt(this.getContentPane().getHeight()),largura,altura);
 this.add(p);
 this.repaint();
 new Thread(new Runnable(){
	 public void run(){
		System.out.println("rund");
		while(true){
		  p.setBounds(p.getX()+1,p.getY(),largura,altura);
		}
	   }
     });
   }else if(bo==false){
   ImageIcon img = new ImageIcon(getClass().getResource("/Assets/pássaro.gif"));
   img.setImage(img.getImage().getScaledInstance(img.getIconWidth()-500,img.getIconHeight()-400, Image.SCALE_DEFAULT));
   int largura = img.getIconWidth();
   int altura = img.getIconHeight();
   JLabel p = new JLabel(img);
   p.setBounds(this.getWidth()-100,rdm.nextInt(this.getContentPane().getHeight()),largura,altura);
   this.add(p);
   this.repaint();
     new Thread(new Runnable(){
    	 public void run(){
    		 System.out.println("run");
    		while(true){
    		  p.setBounds(p.getX()-1,p.getY(),largura,altura);
    	    	}
    	     }
         });
    }
    passquant = rdm.nextInt(9);
   }
  }
 public static void main(String[]args){
 Passaro pass = new Passaro();

}
}

`

2 Respostas

Lucas_Camara
Solucao aceita

Falta chamar o método start() na thread.

new Thread(new Runnable(){
	public void run() {
		System.out.println("rund");
		
		while(true) {
			p.setBounds(p.getX()+1,p.getY(),largura,altura);
		}
	}
}).start();
Thallysson

Muito obrigado, que burrice da minha parte kkkk

Criado 11 de março de 2016
Ultima resposta 11 de mar. de 2016
Respostas 2
Participantes 2