2013-06-28 196 views
-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,因此將繼續重複。

回答

0

你在一個循環測試變量結束條件,但該變量不會在循環改變:

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

如果percent10循環之前比10時,你會循環,直到有ISN沒有足夠的內存來增加bar

你或許應該替換

percent--; 

percent10--; 

你有類似的問題在循環剛過:

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

如果percent10是< 10,然後將其拿下在循環中不會大於10(除了溢出)。

+0

'while(percent10 <10)...' – johnchen902

+0

因此百分比爲< 1 and > = 0,因此可能的最大循環次數爲10次。此外,僅在執行命令遊戲時才調用此方法。 – user2510422

+0

*「可能的最大循環次數是10」*。我想你不明白我的答案。由於您不會更改循環結束條件中使用的變量,因此此循環無法結束。 –