Threads dont work.
Posted: 19 Jul 2011, 03:55
Hi everyone,
Recently I ran into one very confusing problem.
Im writing a game which is using smartfoxserver, and for some reason the run() method from Runnable class interface does not invoke. It does not show any errors or anything, it just does not run.
The interesting thing is that when I copy the code from my files that extend smartfox's classes, which I use for my server extension, and when I put that code in simple java files just for test, everything works.
The files that are involved in the problem:
[code]//MyExt.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.extensions.SFSExtension;
public class MyExt extends SFSExtension {
@Override
public void init() {
this.addRequestHandler("game", GameHandler.class);
this.addRequestHandler("fire", FireHandler.class);
}
}
//GameHadnler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import com.smartfoxserver.v2.extensions.BaseClientRequestHandler;
import java.util.Random;
public class GameHandler extends BaseClientRequestHandler {
static int maxPlayers = 40;
static int numT = 0;
static User[] users = new User[maxPlayers];
@Override
public void handleClientRequest(User player, ISFSObject params) {
//bunch of code here
}
}
//FireHandler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import java.lang.*;
public class FireHandler extends GameHandler {
@Override
public void handleClientRequest(User player, ISFSObject params) {
ISFSObject rtn = new SFSObject();
MyExt parentEx = (MyExt) getParentExtension();
//bunch of my code here
// Create the object with the run() method
Runnable fire = new ThreadHandler();
for(int k = 0; k < numT; k++){
parentEx.send("FIRE_CREATED", rtn, users[k]);
}
// Create the thread supplying it with the runnable object
Thread bulletThread = new Thread(fire);
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_CREATED", rtn, users[k]);
}
// Start the thread
bulletThread.start();
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_END", rtn, users[k]);
}
}
}
//ThreadHandler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
public class ThreadHandler extends GameHandler implements Runnable{
@Override
public void run() {
MyExt parentEx = (MyExt) getParentExtension();
ISFSObject rtn = new SFSObject();
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_STARTED", rtn, users[k]);
}
//other code here which still doesn't run
}
}
[/code]
So can anyone tell me why method run() doesn't invoke and nothing happens after the line: bulletThread.start(); ???
Thanks in advance.
Recently I ran into one very confusing problem.
Im writing a game which is using smartfoxserver, and for some reason the run() method from Runnable class interface does not invoke. It does not show any errors or anything, it just does not run.
The interesting thing is that when I copy the code from my files that extend smartfox's classes, which I use for my server extension, and when I put that code in simple java files just for test, everything works.
The files that are involved in the problem:
[code]//MyExt.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.extensions.SFSExtension;
public class MyExt extends SFSExtension {
@Override
public void init() {
this.addRequestHandler("game", GameHandler.class);
this.addRequestHandler("fire", FireHandler.class);
}
}
//GameHadnler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import com.smartfoxserver.v2.extensions.BaseClientRequestHandler;
import java.util.Random;
public class GameHandler extends BaseClientRequestHandler {
static int maxPlayers = 40;
static int numT = 0;
static User[] users = new User[maxPlayers];
@Override
public void handleClientRequest(User player, ISFSObject params) {
//bunch of code here
}
}
//FireHandler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import java.lang.*;
public class FireHandler extends GameHandler {
@Override
public void handleClientRequest(User player, ISFSObject params) {
ISFSObject rtn = new SFSObject();
MyExt parentEx = (MyExt) getParentExtension();
//bunch of my code here
// Create the object with the run() method
Runnable fire = new ThreadHandler();
for(int k = 0; k < numT; k++){
parentEx.send("FIRE_CREATED", rtn, users[k]);
}
// Create the thread supplying it with the runnable object
Thread bulletThread = new Thread(fire);
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_CREATED", rtn, users[k]);
}
// Start the thread
bulletThread.start();
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_END", rtn, users[k]);
}
}
}
//ThreadHandler.java
package com.a51integrated.sfs2x;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
public class ThreadHandler extends GameHandler implements Runnable{
@Override
public void run() {
MyExt parentEx = (MyExt) getParentExtension();
ISFSObject rtn = new SFSObject();
for(int k = 0; k < numT; k++){
parentEx.send("THREAD_STARTED", rtn, users[k]);
}
//other code here which still doesn't run
}
}
[/code]
So can anyone tell me why method run() doesn't invoke and nothing happens after the line: bulletThread.start(); ???
Thanks in advance.