有什么办法设计出来可以不导致服务器卡顿String oldqqdata = this.sendGetRequest("https://api.uomg.com/api/qq.info?qq=" + this.qq);
this.name=getSubString(oldqqdata, "name\":\"", "\"");复制代码用自带的异步线程没办法访问啊
runTaskAsynchronously(Plugin plugin, BukkitRunnable task)
this.name=getSubString(oldqqdata, "name\":\"", "\"");
- //获取玩家信息
- public String sendGetRequest(String getUrl) {
- StringBuffer sb = new StringBuffer();
- InputStreamReader isr = null;
- BufferedReader br = null;
- try {
- URL url = new URL(getUrl);
- URLConnection urlConnection = url.openConnection();
- urlConnection.setAllowUserInteraction(false);
- isr = new InputStreamReader(url.openStream());
- br = new BufferedReader(isr);
- String line;
- while ((line = br.readLine()) != null) {
- sb.append(line);
- }
- } catch (IOException var8) {
- var8.printStackTrace();
- }
- return sb.toString();
- }
runTaskAsynchronously(Plugin plugin, BukkitRunnable task)
1,你打开文件没有关闭
2,返回值没有办法异步,但是你要实现的功能是什么?真的需要返回吗
2,返回值没有办法异步,但是你要实现的功能是什么?真的需要返回吗
洞穴夜莺 发表于 2020-10-7 17:47
1,你打开文件没有关闭
2,返回值没有办法异步,但是你要实现的功能是什么? ...
网络访问获得一个值,就是返回一个值,但是一直返回的是null值
jack_a1SCS 发表于 2020-10-7 17:49
网络访问获得一个值,就是返回一个值,但是一直返回的是null值
你要获取什么?你获取的内容用途是什么?
理论上StringBuilder#toString()返回内容非空
jack_a1SCS 发表于 2020-10-7 17:49
网络访问获得一个值,就是返回一个值,但是一直返回的是null值
https://docs.oracle.com/javase/8 ... fer.html#toString--
A new String object is allocated and initialized to contain the character sequence currently represented by this object.
为什么会有null?
William_Shi 发表于 2020-10-7 20:04
https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html#toString--
[12:23:22] [Timer-0/INFO]: [Yum] [线程管理] 插件 qqnamebd 在主线程进行网络操作 服务器处于停止状态...
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.net.SocketInputStream.socketRead0(未知:-2)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.net.SocketInputStream.socketRead(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.net.SocketInputStream.read(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.net.SocketInputStream.read(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.security.ssl.InputRecord.readFully(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.security.ssl.InputRecord.read(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.security.ssl.SSLSocketImpl.readRecord(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.security.ssl.SSLSocketImpl.readDataRecord(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.security.ssl.AppInputStream.read(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.io.BufferedInputStream.fill(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.io.BufferedInputStream.read1(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.io.BufferedInputStream.read(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.net.www.http.HttpClient.parseHTTPHeader(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.net.www.http.HttpClient.parseHTTP(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.net.URL.openStream(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 guyue.qqnamebd.qq.QQname.sendGetRequest(QQname.java:72)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 guyue.qqnamebd.qq.QQname.<init>(QQname.java:21)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 guyue.qqnamebd.command.command.onCommand(command.java:41)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 pw.yumc.Yum.inject.CommandInjector.onCommand(CommandInjector.java:106)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:144)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:709)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.network.NetHandlerPlayServer.func_147361_d(NetHandlerPlayServer.java:1594)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.network.NetHandlerPlayServer.func_147354_a(NetHandlerPlayServer.java:1439)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.network.play.client.CPacketChatMessage.func_148833_a(SourceFile:37)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.network.play.client.CPacketChatMessage.func_148833_a(SourceFile:9)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.util.concurrent.Executors$RunnableAdapter.call(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.util.concurrent.FutureTask.run(未知:-1)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.util.Util.func_181617_a(SourceFile:46)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:839)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:472)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:776)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 net.minecraft.server.MinecraftServer.run(MinecraftServer.java:630)
[12:23:22] [Timer-0/INFO]: [Yum] 位于 java.lang.Thread.run(未知:-1)
jack_a1SCS 发表于 2020-10-8 12:30
[12:23:22] [Timer-0/INFO]: [Yum] [线程管理] 插件 qqnamebd 在主线程进行网络操作 服务器处于停止状态. ...
所以哪里有null?
你这要写回调,java语言用RxJava,网络IO还要额外分配线程
如果你用kotlin的话
可以把网络请求的Get/Post写成不阻塞的。
如果你用kotlin的话
可以把网络请求的Get/Post写成不阻塞的。
因为你是要return结果的
所以你在方法内异步处理会导致在处理完成之前return
所以请在调用该方法及所有以后的操作时异步处理
所以你在方法内异步处理会导致在处理完成之前return
所以请在调用该方法及所有以后的操作时异步处理
正常是可以在主线程中访问网络接口的,但由于你服务器装了 yum 插件,拦截了,
所以你后面又说 用自带的异步线程没办法访问,具体啥叫没办法访问?能说下表现出了啥问题吗?按理是可以的,目前我只能这么说,正常
是可以异步访问的
所以你后面又说 用自带的异步线程没办法访问,具体啥叫没办法访问?能说下表现出了啥问题吗?按理是可以的,目前我只能这么说,正常
是可以异步访问的
为什么一定要在主线程执行耗时的IO操作呢,思路就不正确
建议另外开辟线程
建议另外开辟线程