Java 执行另一个方法时未运行事件方法(Discord JDA)
我正在用JDA制作一个Java discord机器人。在我的onMessageReceived()方法中,我创建了游戏类的新类对象,然后运行我的Game.start()方法。在方法的末尾,该方法执行game类中的另一个方法,onMessageReceived()方法应该完成。但是,它完全停止工作,直到游戏对象的方法字符串完成。然后,它处理中间发送的所有消息并输出结果。为什么会发生这种情况?当我的游戏对象正在执行方法时,如何使onMessageReceived()工作 以下是我在onMessageReceived()中的相关代码: 从游戏方法来看:Java 执行另一个方法时未运行事件方法(Discord JDA),java,discord-jda,Java,Discord Jda,我正在用JDA制作一个Java discord机器人。在我的onMessageReceived()方法中,我创建了游戏类的新类对象,然后运行我的Game.start()方法。在方法的末尾,该方法执行game类中的另一个方法,onMessageReceived()方法应该完成。但是,它完全停止工作,直到游戏对象的方法字符串完成。然后,它处理中间发送的所有消息并输出结果。为什么会发生这种情况?当我的游戏对象正在执行方法时,如何使onMessageReceived()工作 以下是我在onMessage
public void start(int qs, String categoryin, String difficultyin, String typein) {
channel.sendMessage("Starting Trivia...").queue();
numberofqs = qs;
String difficulty;
String type;
String category;
pointsperq = 1;
if (difficultyin.equalsIgnoreCase("easy")) {
difficulty = "easy";
channel.sendMessage("Difficulty = Easy").queue();
} else if (difficultyin.equalsIgnoreCase("normal")) {
difficulty = "medium";
pointsperq = pointsperq*2;
channel.sendMessage("Difficulty = Normal").queue();
} else if (difficultyin.equalsIgnoreCase("hard")) {
difficulty = "hard";
pointsperq = pointsperq*3;
channel.sendMessage("Difficulty = Hard").queue();
} else {
difficulty = "";
channel.sendMessage("Difficulty = Any").queue();
pointsperq = pointsperq*2;
}
if (typein.equalsIgnoreCase("tf")) {
type = "boolean";
channel.sendMessage("Question Type = True/False").queue();
} else if (typein.equalsIgnoreCase("mc")) {
type = "multiple";
pointsperq = pointsperq*3;
channel.sendMessage("Question Type = Multiple Choice").queue();
} else {
type = "";
pointsperq = pointsperq*2;
channel.sendMessage("Question Type = Any").queue();
}
if (triviaDB.getCategory().contains(categoryin)) {
channel.sendMessage("Category = "+categoryin).queue();
category = categoryin;
} else {
channel.sendMessage("Category = Any").queue();
category = "";
}
channel.sendMessage("# of Q's = "+qs).queue();
questions = new HashMap<>(triviaDB.getQuestions(qs, category, difficulty, type));
qnumber = 1;
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
channel.sendMessage("Welcome to Trivia Game "+name).queue();
channel.sendMessage("Starting in 10 Seconds!").queue();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
displayQuestion(qnumber);
}
public void start(int-qs,String-categoryin,String-hardicultyin,String-typein){
channel.sendMessage(“启动琐事…”)。queue();
numberofqs=qs;
弦乐难度;
字符串类型;
字符串类别;
pointsperq=1;
if(同等信号情况下的困难(“容易”)){
难度=“容易”;
channel.sendMessage(“困难=容易”).queue();
}else if(同等信号情况下的困难(“正常”)){
难度=“中等”;
pointsperq=pointsperq*2;
channel.sendMessage(“难度=正常”).queue();
}else if(同等信号情况下的困难(“硬”)){
难度=“难”;
pointsperq=pointsperq*3;
channel.sendMessage(“难度=硬”).queue();
}否则{
难度=”;
channel.sendMessage(“困难=任何”).queue();
pointsperq=pointsperq*2;
}
如果(键入相等信号情况(“tf”)){
type=“boolean”;
channel.sendMessage(“问题类型=真/假”).queue();
}else if(键入相等信号情况(“mc”)){
type=“多个”;
pointsperq=pointsperq*3;
channel.sendMessage(“问题类型=多项选择”).queue();
}否则{
类型=”;
pointsperq=pointsperq*2;
channel.sendMessage(“问题类型=任何”).queue();
}
if(triviaDB.getCategory().contains(categoryin)){
channel.sendMessage(“Category=“+categoryin).queue();
类别=类别;
}否则{
channel.sendMessage(“Category=Any”).queue();
类别=”;
}
channel.sendMessage(“#of Q's=“+qs).queue()”;
问题=新的HashMap(triviaDB.getQuestions(qs、类别、难度、类型));
qnumber=1;
试一试{
睡眠(3000);
}捕捉(中断异常e){
e、 printStackTrace();
}
channel.sendMessage(“欢迎来到琐事游戏”+name).queue();
channel.sendMessage(“10秒后开始!”).queue();
试一试{
睡眠(10000);
}捕捉(中断异常e){
e、 printStackTrace();
}
显示问题(qnumber);
}
public void start(int qs, String categoryin, String difficultyin, String typein) {
channel.sendMessage("Starting Trivia...").queue();
numberofqs = qs;
String difficulty;
String type;
String category;
pointsperq = 1;
if (difficultyin.equalsIgnoreCase("easy")) {
difficulty = "easy";
channel.sendMessage("Difficulty = Easy").queue();
} else if (difficultyin.equalsIgnoreCase("normal")) {
difficulty = "medium";
pointsperq = pointsperq*2;
channel.sendMessage("Difficulty = Normal").queue();
} else if (difficultyin.equalsIgnoreCase("hard")) {
difficulty = "hard";
pointsperq = pointsperq*3;
channel.sendMessage("Difficulty = Hard").queue();
} else {
difficulty = "";
channel.sendMessage("Difficulty = Any").queue();
pointsperq = pointsperq*2;
}
if (typein.equalsIgnoreCase("tf")) {
type = "boolean";
channel.sendMessage("Question Type = True/False").queue();
} else if (typein.equalsIgnoreCase("mc")) {
type = "multiple";
pointsperq = pointsperq*3;
channel.sendMessage("Question Type = Multiple Choice").queue();
} else {
type = "";
pointsperq = pointsperq*2;
channel.sendMessage("Question Type = Any").queue();
}
if (triviaDB.getCategory().contains(categoryin)) {
channel.sendMessage("Category = "+categoryin).queue();
category = categoryin;
} else {
channel.sendMessage("Category = Any").queue();
category = "";
}
channel.sendMessage("# of Q's = "+qs).queue();
questions = new HashMap<>(triviaDB.getQuestions(qs, category, difficulty, type));
qnumber = 1;
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
channel.sendMessage("Welcome to Trivia Game "+name).queue();
channel.sendMessage("Starting in 10 Seconds!").queue();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
displayQuestion(qnumber);
}