簡體   English   中英

即使使用胖子罐,Java程序也無法在Raspberry PI 2上完全正常工作

[英]Java program not fully working on Raspberry PI 2 even when using a fat jar

我這里有一個小問題。 我正在我的PI上運行帶有多個命令的Discord-bot,到目前為止效果還不錯。
今天,我計划實施一個新命令來檢查游戲服務器的狀態,這需要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)

如果沒有User-Agent標頭,則服務器發送403禁止錯誤。 因此,我們必須添加一個。 為此,我們將其創建后添加到連接中,如下所示。

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

在這種情況下,內容無關緊要,因為服務器不會對其進行檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM