![](/img/trans.png)
[英]How to send ISO message Object from client to Netty server in java
[英]How do I send a spring message to client from a Java object
我需要使用SimpMessagingTemplate(或JSON格式的任何消息)將stomp消息從對象發送到我的客戶端
但是我的對象不是Controller,如果我將我的類聲明為控制器,我的Spring啟動應用程序由於沒有設置bean而無法啟動。
我正在為我的學士論文創建一個游戲,該游戲托管在Spring服務器上。 在我的應用程序中,我有房間,每個房間都有一個運行一個線程的gameSession。
我目前有一個名為RoomsController的類,它將預定的消息發送到服務器
@Controller
public class RoomsController {
@Autowired
private SimpMessagingTemplate template;
@Scheduled(fixedRate = 500)
public void updateRoomsInterface() throws Exception {
Game.getInstance().getRooms().forEach((k,v) -> {
if (v != null) {
System.out.println("Ted posilam do room " + k + " ktery se jmenuje " + v.getName() + " cely seznam hracu, schvalne co mi prijde, ok?");
Map <String, Player> playersList = v.getPlayers();
// String message = v.getPlayers().get;
this.template.convertAndSend("/topic/game/room/"+v.getID(), playersList);
}
});
}
}
這有點好,但我需要我的GameSession對象獨立於服務器計時器(因為不同的游戲在不同的時間開始,我需要使用游戲的滴答)
我的GameSession目前看起來像這樣:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
public class GameSession extends Thread {
@Autowired
private SimpMessagingTemplate template;
private volatile boolean exit = false;
private Room room;
public GameSession(Room room) {
this.room = room;
status = "WAITING";
}
@Override
public void run() {
// dokud ne exit
while (!false) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sendMessage();
}
}
public void sendMessage() {
System.out.println("Does this execute?");
this.template.convertAndSend("/topic/game/room/"+room.getID()+"/session", "THIS IS A TEST");
}
}
但是當這個執行時,我在線程中得到一個異常
Does this execute?
Exception in thread "Thread-6" java.lang.NullPointerException
at cz.vse.pavm07.bp.objects.GameSession.sendMessage(GameSession.java:65)
at cz.vse.pavm07.bp.objects.GameSession.run(GameSession.java:34)
我需要每個gameSession直接從gameSession對象發送消息,因為滴答聲。
我究竟做錯了什么?
您的GameSession
未標記為bean,因此請添加@Component
或其他GameSession
型注釋以將其標記為spring bean。
@Service
public class GameSession extends Thread {
@Autowired
private SimpMessagingTemplate template;
//code here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.