J'essaye de construire un jeu simple en Java. Ran dans le problème de JTextPanel ne pas mettre à jour jusqu'à ce que la boucle de jeu se termine, ce qui, bien sûr, n'est pas une bonne expérience pour le joueur. Je ne suis pas familier avec le multithreading mais j'essaie de le comprendre. Je peux maintenant exécuter du code séparé dans plusieurs threads, mais je n'arrive pas à comprendre comment faire interagir les threads. Il est fort probable qu'il me manque quelque chose de simple, mais je ne peux pas le trouver en cherchant, alors je me jette à votre merci. Je suis suspendu par un fil ...Multithread sans objets étroitement couplés
Classe de contrôleur et fil principal. J'ai besoin du gamePanel et du jeu pour fonctionner séparément. J'ai essayé d'exécuter la classe Game dans un thread séparé, mais le code du jeu ne fonctionne pas dans le gamePanel.
Controller:
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Controller_LetterFall{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new MainFrame();
}
});
}
}
et la classe mainframe. J'essaie d'exécuter gameplay() dans un nouveau thread.
package wordFall;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainFrame extends JFrame implements Runnable {
private GamePlay game;
private TextPanel gamePanel;
private Header header;
private Player player;
private Dictionary dictionary;
private GamePlay game;
public MainFrame(){
super("Game");
// Set the size of the frame.
setSize(400,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
// Establish default player.
player = new Player();
dictionary = new Dictionary();
game = new GamePlay();
header = new Header();
gamePanel = new TextPanel();
add(header, BorderLayout.NORTH);
add(gamePanel, BorderLayout.CENTER);
this.game.setBoardInterface(
new BoardInterface(){
@Override
public void redraw(String text) {
gamePanel.appendText(text);
}
});
}
@Override
public void run() {
game.play();
System.out.println("The game is over.");
}
}
Toute aide serait appréciée.
Je ne vois aucun thread dans votre exemple. –