Hallo Leute,
hab folgende Problem ich will ein Methoden Aufruf in einem separaten Thread laufen lassen, weil sich sonst die GUI bei meinem Programm aufhängt.
Da dachte ich mir ich lass einfach das ganze Objekt der Klasse in der die Methode ist in einem anderen Thread laufen habs wiefolgt geschrieben .
Nur klappts nicht ganz. Wo ist der fehler oder gehts so überhaupt?
hab folgende Problem ich will ein Methoden Aufruf in einem separaten Thread laufen lassen, weil sich sonst die GUI bei meinem Programm aufhängt.
Da dachte ich mir ich lass einfach das ganze Objekt der Klasse in der die Methode ist in einem anderen Thread laufen habs wiefolgt geschrieben .
Nur klappts nicht ganz. Wo ist der fehler oder gehts so überhaupt?
Java:
public class BattleShipClient extends Thread {
private BattleShipRemote battleShipRemote;
private BusSystemManager busSystemManager;
private int gameNumber;
private int clientID;
private MainFrameBS mainFrameBs;
/**
* Starts the game thread
*/
public BattleShipClient() {
connectToServer();
getGameRoom();
}
/**
* Makes the connection between client and server
*/
public void connectToServer() {
try {
Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(jndiProperties);
String beanName;
String viewClassName;
beanName = BattleShipBean.class.getSimpleName();
viewClassName = BattleShipRemote.class.getName();
battleShipRemote = (BattleShipRemote)context.lookup("ejb:battleship-application/battleship//" + beanName + "!" + viewClassName);
clientID = battleShipRemote.getClientID();
}
catch (Exception x) {
connectionDialog.setStatusLabel("Server nicht verfügbar.");
}
}
/**
* Looks in a loop for a gameroom
*/
private void getGameRoom() {
boolean isGameRoomFound = false;
do {
if (isGameRoomFound == false) {
gameNumber = battleShipRemote.getGameRoom(clientID);
isGameRoomFound = true;
}
try {
Thread.sleep(1500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
while (!battleShipRemote.isPlayerFound(clientID, gameNumber));
openMainFrameBS();
}
/**
* Waiting in a loop for the okay from both players
* !!!!!!!!!!!!!!!!!!!!! Also das ist die Methode die ich Aufrufen will, aber sobald ichd as tuhe hängt sich die GUI auf. !!!!!!!!
*/
public void setPlayerReady() {
battleShipRemote.setPlayerReady(clientID, gameNumber);
do {
try {
Thread.sleep(1500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
while (!battleShipRemote.isGameStart(gameNumber));
}
/**
* Creates a new frame
*/
private void openMainFrameBS() {
mainFrameBs = new MainFrameBS(busSystemManager);
mainFrameBs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrameBs.setSize(1000, 570);
mainFrameBs.setLocationRelativeTo(null);
mainFrameBs.setResizable(false);
mainFrameBs.setVisible(true);
}
public static void main(String[] args) {
Thread newThread = new Thread(new BattleShipClient());
newThread.start();
}
Zuletzt bearbeitet von einem Moderator: