Java threads

2 respostas
java
Pantrol

Por que meu ‘Sout ok’ do método run não e exibido na tela do console?

package Principal;

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class Game extends Canvas implements Runnable{

	// Variaveis!
	public JFrame frame;
	public static final int WIDTH = 800;
	public static final int HEIGHT = 600;

	private Thread thread;
	private boolean isRunning=true;

	// Metodo Construtor!
	public Game(){

	initFrame();

	}

	//Metodo Comum!
	public void initFrame(){

		frame = new JFrame();
		frame.add(this);
		frame.setPreferredSize(new Dimension(WIDTH,HEIGHT));
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);

	}

	public synchronized void start(){
		thread = new Thread(this);
		isRunning = true;

	}
	public synchronized void stop(){

	}


	public static void main(String[] args) {

		Game game = new Game();
		game.start();
}

	public void tick(){

	}
	public void render(){

	}

	@Override
	public void run() {

	System.out.println("OK");


	}

}

2 Respostas

lvbarbosa

Quando você cria uma Thread como você fez, ela começa no estado NEW e não é agendada para execução. Uma forma de fazer isso é chamar o método start() no objeto da Thread: a JVM vai agendar essa thread para execução, movendo-a pro estado RUNNABLE e vai chamar o método run dela pra você. No caso, como o seu objeto foi construído usando um Runnable, o run da Thread acaba invocando o run do seu Runnable, fazendo então o seu print. Dá uma lida nos javadocs das classes Thread e da classe Thread.State, tem bastante informação útil lá. O material mais fantástico q já li sobre isso foi o livro Java Concurrency in Practice.

Um exemplo:

public class Main {
    public static void main(String[] args) {
        Task myTask = new Task();
        Thread t = new Thread(myTask);
        t.start();
    }
}

class Task implements Runnable {
    @Override
    public void run() {
        System.out.println("Hello, World!");
    }
}

Uma sugestão: quando for colar código aqui pra o pessoal te ajudar, tenta enxugar o exemplo o máximo possível. Tem um monte de coisa nesse código q não tem nada a ver com o problema. Se você enxugar o exemplo, vai ficar bem mais fácil de alguém te ajudar!

Pantrol

nossa cara resposta melhor que essa não acho em lugar nenhum do mundo obrigadão mesmo vou guardar bem essa resposta sua para vida inteira.:blue_heart::+1:

Criado 20 de setembro de 2020
Ultima resposta 21 de set. de 2020
Respostas 2
Participantes 2