jack_a1SCS
有什么办法设计出来可以不导致服务器卡顿String oldqqdata = this.sendGetRequest("https://api.uomg.com/api/qq.info?qq=" + this.qq);
this.name=getSubString(oldqqdata, "name\":\"", "\"");
  1. //获取玩家信息
  2.     public String sendGetRequest(String getUrl) {
  3.         StringBuffer sb = new StringBuffer();
  4.             InputStreamReader isr = null;
  5.             BufferedReader br = null;
  6.             try {
  7.                 URL url = new URL(getUrl);
  8.                 URLConnection urlConnection = url.openConnection();
  9.                 urlConnection.setAllowUserInteraction(false);
  10.                 isr = new InputStreamReader(url.openStream());
  11.                 br = new BufferedReader(isr);

  12.                 String line;
  13.                 while ((line = br.readLine()) != null) {
  14.                     sb.append(line);
  15.                 }
  16.             } catch (IOException var8) {
  17.                 var8.printStackTrace();
  18.             }
  19.         return sb.toString();
  20.     }
复制代码
用自带的异步线程没办法访问啊
runTaskAsynchronously(Plugin plugin, BukkitRunnable task)






洞穴夜莺
1,你打开文件没有关闭
2,返回值没有办法异步,但是你要实现的功能是什么?真的需要返回吗

jack_a1SCS
洞穴夜莺 发表于 2020-10-7 17:47
1,你打开文件没有关闭
2,返回值没有办法异步,但是你要实现的功能是什么? ...

网络访问获得一个值,就是返回一个值,但是一直返回的是null值

洞穴夜莺
jack_a1SCS 发表于 2020-10-7 17:49
网络访问获得一个值,就是返回一个值,但是一直返回的是null值

你要获取什么?你获取的内容用途是什么?
理论上StringBuilder#toString()返回内容非空

William_Shi
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?

jack_a1SCS
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?

Itsusinn
你这要写回调,java语言用RxJava,网络IO还要额外分配线程
如果你用kotlin的话
可以把网络请求的Get/Post写成不阻塞的。

mzmzmz
因为你是要return结果的
所以你在方法内异步处理会导致在处理完成之前return
所以请在调用该方法及所有以后的操作时异步处理

QiuJay
正常是可以在主线程中访问网络接口的,但由于你服务器装了 yum 插件,拦截了,

所以你后面又说 用自带的异步线程没办法访问,具体啥叫没办法访问?能说下表现出了啥问题吗?按理是可以的,目前我只能这么说,正常

是可以异步访问的

SAO_OSA
为什么一定要在主线程执行耗时的IO操作呢,思路就不正确
建议另外开辟线程