Java程序不能完全在Raspberry PI 2上运行,即使使用胖罐子也是如此



我这里有一个小问题。我正在我的 PI 上运行一个带有多个命令的 Discord 机器人,到目前为止效果很好。
今天,我计划实现一个新命令来检查游戏服务器的状态,这需要URLConnection。像往常一样,我创建了一个包含所有库等的胖罐子,并在我的 PC(Windows 10)上对其进行了测试,效果很好。
当我在我的PI上运行程序时,它在程序开始时没有显示任何错误,但是一旦我运行新命令,它总是给我一个异常(在代码中标记它)。
我不知道如何解决这个问题,请帮助我。

这是我的代码:

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Timer;
import java.util.TimerTask;
import main.permsMain;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
public class cmdisonline implements Commands {
public void action(final String[] args, MessageReceivedEvent event) {
if((args.length == 3)) { 
switch(args[2]) {
case "-p":
if(permsMain.check(event)) {
try {
String input = new String(args[0]);
String webPage = new String("http://arkservers.net/server/"+input);
URL url = new URL(webPage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
System.out.println("test"); //it doesn't write this into console
int numCharsRead;
char[] charArray = new char[1024];
StringBuffer sb = new StringBuffer();
while ((numCharsRead = isr.read(charArray)) > 0) {
sb.append(charArray, 0, numCharsRead);
}
String result = sb.toString();
boolean foundPumbaa = false;
System.out.println("[Info] URL: "+ url);
if(!result.contains("Server Not Found")) {
if (result.contains("Last Offline")) {
foundPumbaa = true;
System.out.println("[Info] "+ input +" is online."); 
event.getChannel().sendMessage("**Server __"+ args[1] +"__ is online!.** :white_check_mark:").queue();;                                 
}
if (!foundPumbaa) {
System.out.println("[Info] "+ input +" is offline.");
event.getChannel().sendMessage("**__"+args[1]+"__ is either ghosting or down.**:x:nIf you are sure that the server is ghosting then please use the **!ping** command for any further actions.").queue();
}
} else {
System.out.println("[Info] "+ input +" not found.");
event.getChannel().sendMessage("**Couldn't resolve hostname '"+ args[0] +"'.**nPlease make sure you include the port and only use IP's from http://arkservers.net").queue();
}
} catch(Exception ServerNotFound) { //Throws me this Exception
event.getChannel().sendMessage("**Error: Couldn't resolve hostname '"+ args[0] +"'.**nPlease make sure you include the port and only use IP's from http://arkservers.net").queue();
ServerNotFound.printStackTrace();
}
}
break;
default:
event.getChannel().sendMessage("Usage: **!isonline <IP> <Name> <Parameter>** nPlease make sure to include the port.").queue();
break;
}
} else {
event.getChannel().sendMessage("Usage: **!isonline <IP> <Name> <Parameter>** nPlease make sure to include the port.").queue();
}
}

编辑:异常日志

java.io.IOException: Server returned HTTP response code: 403 for URL: http://arkservers.net/server/85.190.158.37:27017
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at commands.cmdisonline.action(cmdisonline.java:86)
at main.commandHandler.handleCommand(commandHandler.java:17)
at listeners.commandListener.onMessageReceived(commandListener.java:13)
at net.dv8tion.jda.core.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:403)
at net.dv8tion.jda.core.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:84)
at net.dv8tion.jda.core.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:122)
at net.dv8tion.jda.core.handle.SocketHandler.handle(SocketHandler.java:37)
at net.dv8tion.jda.core.requests.WebSocketClient.handleEvent(WebSocketClient.java:1051)
at net.dv8tion.jda.core.requests.WebSocketClient.onTextMessage(WebSocketClient.java:691)
at net.dv8tion.jda.core.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:1099)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:368)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:270)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:990)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:749)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)

如果没有用户代理标头,服务器将发送 403 禁止错误。所以我们必须添加一个。为此,我们在创建后将其添加到连接中,如下所示。

con.setRequestProperty("User-Agent", "");

在这种情况下,内容无关紧要,因为服务器不会检查它。

最新更新