-1

基本上,每当我在服务器中键入某个命令时,它都会多次加载所有这些代码(20+)。出于某种原因,每当我键入命令时,服务器都会冻结(包括控制台)。如果我停止服务器并重新启动它,它会说某些东西绑定到服务器正在运行的端口,导致我不得不终止服务器进程。是因为在我发出命令时运行的计算太多了吗?我记得它以前没有崩溃过,但是在我改变了百分比条的计算方式之后,它每次都崩溃了。

package com.mcvigor.utils;

import java.util.ArrayList;

import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.inventory.meta.ItemMeta;

import com.mcvigor.RunePlayer;
import com.mcvigor.Skills;

public class ItemUtils {

    public static ItemMeta addSkillInformation(ItemMeta i, Skills skill, RunePlayer rp) {
        i.setDisplayName(ChatColor.GOLD + WordUtils.capitalize(skill.toString().toLowerCase()));
        ArrayList<String> lore = new ArrayList<String>();
        lore.add(ChatColor.RED + "Level " + ChatColor.YELLOW + rp.getSkillLevel(skill));
        int xp = rp.getSkillXP(skill);
        int neededXP = rp.getXPRequiredForLevel((rp.getSkillLevel(skill) + 1));
        lore.add(ChatColor.RED + "Experience: " + ChatColor.YELLOW + xp + ChatColor.RED + " / " + ChatColor.YELLOW + neededXP);
        lore.add(ChatColor.RED + "Remainder: " + ChatColor.YELLOW + (neededXP - xp));
        float percent = (xp/neededXP);
        int percent10 = (int) Math.floor(percent * 10);
        String bar = "";
        while (percent10 >= 10) {
            bar += ChatColor.GREEN + "▀";
            percent--;
        }
        while (percent10 < 10) {
            bar += ChatColor.RED + "▀";
            percent10--;
        }
        lore.add(ChatColor.RED + "Percent to next level: " + ChatColor.YELLOW + (int) percent + ChatColor.RED + "%");
        lore.add(bar);
        i.setLore(lore);
        return i;
    }
}

编辑:认为是因为:

    while (percent10 < 10) {
        bar += ChatColor.RED + "▀";
        percent10--;
    }

percent10 总是小于 10,所以它会不断重复。

4

1 回答 1

0

您正在循环结束条件下测试一个变量,但该变量在循环中没有改变:

while (percent10 >= 10) {
        bar += ChatColor.GREEN + "▀";
        percent--;
}

如果percent10大于10循环之前,您将循环直到没有足够的内存来扩充bar

你可能应该更换

percent--;

percent10--;

紧随其后的循环中有类似的问题:

while (percent10 < 10) {
        bar += ChatColor.RED + "▀";
        percent10--;
}

如果 percent10 < 10,那么它在循环中不会大于 10(除了溢出的情况)。

于 2013-06-28T06:15:33.800 回答