处理草图时出现带有Websocket的NullPointerException
我已经建立了一个利用语音识别库进行处理的示例,效果良好 我试图将字符串的内容发送到Draw函数,当您没有在void设置中定义默认值时,它会导致NullException错误 首先,我认为我应该设置一个全局字符串msg,但无论我如何定义它,它都不会用除了单词test之外的任何东西更新draw函数。这是因为我在void setup()中将其定义为具有值“test” 但是,如果删除单词test,将再次导致空异常错误 发生的情况是字符串msg默认为值测试,但一旦您对着笔记本电脑麦克风讲话,控制台应通过text()更新单词或句子;函数,然后在处理java窗口中显示更新的单词处理草图时出现带有Websocket的NullPointerException,websocket,nullpointerexception,processing,Websocket,Nullpointerexception,Processing,我已经建立了一个利用语音识别库进行处理的示例,效果良好 我试图将字符串的内容发送到Draw函数,当您没有在void设置中定义默认值时,它会导致NullException错误 首先,我认为我应该设置一个全局字符串msg,但无论我如何定义它,它都不会用除了单词test之外的任何东西更新draw函数。这是因为我在void setup()中将其定义为具有值“test” 但是,如果删除单词test,将再次导致空异常错误 发生的情况是字符串msg默认为值测试,但一旦您对着笔记本电脑麦克风讲话,控制台应通过t
导入WebSocket。*;
WebsocketServer套接字;
pfontf;
串味精;
无效设置(){
socket=newWebSocketServer(这是1337,“/p5websocket”);
noLoop();
大小(480、120);
f=createFont(“Arial”,16,true);//Arial,16点,启用抗锯齿
如果(msg==null){
msg=“测试”;
println(msg);
}
否则{
println(msg);
}
}
作废提款(){
背景(100);
textFont(f,36);
填充(180);
println(msg);
text(msg,10,10,70,80);//文本框中的文本换行
}
无效webSocketServerEvent(字符串消息){
println(msg);
}
您是否询问如何将草图级别msg
变量分配给传递到webSocketServerEvent()
函数的msg
参数的值
请注意,仅仅因为它们具有相同的名称并不意味着它们是相同的变量。它们是两个不同范围内的两个不同变量。如果要引用或重新指定草图级别变量,可以使用this
关键字消除歧义:
void webSocketServerEvent(String msg){
this.msg = msg;
println(msg);
}
或者您可以重命名其中一个变量:
void webSocketServerEvent(String webSocketMessage){
this.msg = webSocketMessage;
println(msg);
}
在“测试”之后,您没有为
msg
分配任何值,因此它不能在任何地方更改。您的意思是在活动中分配它吗?谢谢,我不太确定如何分配它以便它在draw函数中更新。其中表示text(msg,10,10,70,80)是我希望从void webSocketServerEvent中得到的值,用于更新processing java窗口中显示的文本。目前,它只是在该窗口中显示test,但没有使用websocket中的新信息进行更新。msg的值在void webSocketServerEvent(String msg){println(msg);}中进行更新,因为当您对着麦克风讲话时,它会在控制台窗口中打印出处理中的结果,但它不会被void draw()捕获{}不,那个人只是在接收并打印它。它没有被存放在任何地方。您可能需要添加this.msg=msg我尝试将其添加到void setup()、void draw()和void webSocketServer()中,但它们都没有任何区别。如果控制台中出现了一个静态设置的msg as in test变量,以及一个来自void websocketServer的动态变化变量(也称为msg),我无法理解为什么其中一个不更新另一个,因为这两个变量中的字符串名称相同。是否应在文本(msg,10,10,70,80)之前的draw函数中首先调用void websocketServer;使用webSocketServer(msg);也许?我尝试了这两种方法,但都没有改变控制台中“test”字符串的值。你在哪里写这个似乎并不重要。msg=webSocketMessage;在java窗口中,输出总是单词“test”。但是voice rec会将控制台消息更改为您对麦克风所说的任何内容。我想知道如何捕获该字符串,而不是void setup()中定义的静态字符串?@undesignuk从更简单的开始。创建默认显示“测试”的草图,并在单击鼠标后将其切换为“单击”。先让它工作起来。如果你不能让它工作,把你的代码作为一个问题贴在一个新的帖子里。