亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 格式化程序問題

Java 格式化程序問題

蠱毒傳說 2021-06-14 13:26:08
java.util.MissingFormatArgumentException: Format specifier 's'    at java.util.Formatter.format(Formatter.java:2487) ~[na:1.7.0_80]    at java.util.Formatter.format(Formatter.java:2423) ~[na:1.7.0_80]    at java.lang.String.format(String.java:2enter code here792) ~[na:1.7.0_80]    at com.aionemu.gameserver.utils.audit.GMService.onPlayerUnavailable(Unknown Source) ~[AL-Game.jar:na]    at admincommands.GMMode.execute(GMMode.java]:73) ~[na:na]當我在游戲中發送命令時,出現此錯誤。該問題與我的配置文件有關,還是與 java 完全有關?整個代碼是:package admincommands; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.network.aion.serverpackets.SM_MOTION; import com.aionemu.gameserver.network.aion.serverpackets.SM_PLAYER_INFO; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.utils.audit.GMService; import com.aionemu.gameserver.utils.chathandlers.AdminCommand;  */ public class GMMode extends AdminCommand {    public GMMode() {        super("gm");    }    @Override    public void execute(Player admin, String... params) {        if (admin.getAccessLevel() < 1) {            PacketSendUtility.sendMessage(admin, "You cannot use this command.");            return;        }        if (params.length != 1) {            onFail(admin, null);            return;        }        if (params[0].toLowerCase().equals("on")) {            if (!admin.isGmMode()) {                admin.setGmMode(true);                admin.setWispable();
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

異常告訴您,String.format發生了格式說明符多于格式值的情況。所以某處有一個電話像


ret = String.format("name %s, surname %s", "Firstname");

根據堆棧跟蹤,這發生在您的問題中缺少的com.aionemu.gameserver.utils.audit.GMService方法中的 某個地方onPlayerUnavailable。


一個簡短的谷歌搜索帶來了一個 Git 項目,在那里你可以看到罪魁禍首的來源,在那里你可以看到一個調用String.format:


Iterator<Player> iter = World.getInstance().getPlayersIterator();

while (iter.hasNext()) {

    PacketSendUtility.sendBrightYellowMessageOnCenter(iter.next(), "Information : " + String.format(adminTag, player.getName()) + LanguageHandler.translate(CustomMessageId.ANNOUNCE_GM_DECONNECTION));

}

該變量adminTag是根據Player您正在傳遞的實例中的設置而構建的,所以說得更多,我們需要有關該實例狀態的信息 - 通常查看源代碼僅顯示以下幾行是可能的原因您遇到的異常:


if (MembershipConfig.PREMIUM_TAG_DISPLAY) {

    switch (player.getClientConnection().getAccount().getMembership()) {

        case 1:

        adminTag = sb.insert(0, MembershipConfig.TAG_PREMIUM.substring(0, 2)).toString();

        break;

    case 2:

        adminTag = sb.insert(0, MembershipConfig.TAG_VIP.substring(0, 2)).toString();

        break;

    }

}

// * = Wedding

if (player.isMarried()) {

    adminTag = sb.insert(0, WeddingsConfig.TAG_WEDDING.substring(0, 2)).toString();

}

查看保存例如值的相應類,TAG_WEDDING我猜您的配置包含這些常量中至少一個的自定義值,這些常量以 開頭%s,因此adminTag最終為%s%s.


所以回答你的問題


該問題與我的配置文件有關,還是與 java 完全有關?


我猜這是您的配置文件中的錯誤(一些以 開頭的字符串%s)或您正在使用的庫中的錯誤,但這絕對不是 Java 中的錯誤。


查看完整回答
反對 回復 2021-06-17
  • 1 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號