2012-09-02 40 views
0

可能重複:
eclipse 3.4 (ganymede) package collision with type包有型碰撞

我在Java的新的,但是我試着寫腳本,針對一遊戲天堂2。

繼承人代碼:

package ZergZ.ZTeleport; 
import javolution.util.FastMap; 
import com.l2jserver.Config; 
import com.l2jserver.gameserver.handler.IVoicedCommandHandler; 
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; 
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; 
import com.l2jserver.gameserver.model.Location; 
import com.l2jserver.gameserver.handler.VoicedCommandHandler; 

public class ZTeleport implements IVoicedCommandHandler 
{ 
    private static final String[] VOICED_COMMANDS = 
    { 
     "teleport" 
    }; 
    @Override 
    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params) 
    { 
     if (activeChar == null) 
      return false; 

     if (params.equalsIgnoreCase("aden")) 
     { 
      activeChar.teleToLocation(147736,-56243,-2781); 
     } 
     if (params.equalsIgnoreCase("gracia")) 
     { 
      activeChar.teleToLocation(-186742,244167,2675); 
     } 
     if (params.equalsIgnoreCase("pvp1")) 
     { 
      activeChar.teleToLocation(147736,-56243,-2781); 
     } 
     if (params.equalsIgnoreCase("pvp2")) 
     { 
      activeChar.teleToLocation(179337,221937,4475); 
     } 

    } 
    @Override 
    public String[] getVoicedCommandList() 
    { 
     return VOICED_COMMANDS; 
    } 


} 

服務器啓動時的java說: 1. ERROR在\ ZTeleport.java(在線路17)
包ZergZ.ZTeleport;
                            ^^^^^^^^^^^^^^^^^^^^
封裝ZergZ.ZTeleport與一種類型的碰撞

腳本位於ZergZ/ZTeleport.java

我給你另一個腳本的正常工作:

package custom.HeroCirclet; 

import com.l2jserver.gameserver.model.actor.L2Npc; 
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; 
import com.l2jserver.gameserver.model.quest.Quest; 
import com.l2jserver.gameserver.model.quest.QuestState; 

public class HeroCirclet extends Quest 
{ 
______ 
} 

謝謝。

回答

2

你說 「的劇本位於ZergZ/ZTeleport.java」。這意味着類ZTeleport屬於包ZergZ。但是你已經聲明它屬於不同的包,ZergZ.ZTeleport

在你的第二個例子,我敢打賭,源文件位於自定義/ HeroCirclet/HeroCirclet.java,其中它的包聲明相匹配,並不會產生命名衝突。

你要麼需要移動的源文件(人們通常不叫Java源文件「腳本」,順便說一句)成其聲明的包相匹配的目錄,或改變包裝聲明,以符合其位置。

+0

謝謝,我會嘗試。 –

2

這是因爲您在ZergZ軟件包中有一個名爲ZTeleport的類和一個名爲ZergZ.ZTeleport的軟件包。

package名稱基本上是Java文件所在的項目目錄。

這意味着,如果ZTeleport.javaZergZ目錄,然後包名是

package ZergZ; 

不指定在包聲明和目錄與一個.,而不是目錄文件夾標記分隔的類名。

+0

我給你一個腳本,它完美的作品,它;只是像我這樣的(beggining) –

+0

包custom.HeroCirclet; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.QuestState; 公共類HeroCirclet擴展任務 { –

+0

我可以向你保證'HeroCirclet'正在目錄'定製/ HeroCirclet',這就是爲什麼它編譯罰款。 –

1

這裏的碰撞是在你的包名和你的類名之間,它們是相同的。如果你堅持通常的命名約定(用小寫字母開頭命名你的包和用大寫字母開頭的類),你應該避免這種情況。

+0

它沒有幫助我:S –

+0

你的意思是你用小寫字母開頭的字符串重新命名你的軟件包,並且你仍然有錯誤「軟件包與類型衝突」,新的軟件包名稱?我會發現它令人驚訝(這並不意味着它會解決你所有的問題,但這是一個開始)。 – Eusebius

0

您應遵循Java命名約定。你的包變成:

package zergZ.zTeleport; // all name is begin with lower 

// no change, but for clearer : all class name should begin with higher character 
public class ZTeleport implements IVoicedCommandHandler 
{ 
} 

之後,可以肯定,你應該刷新和/或重建項目,看看它的工作原理。

希望這有助於:)

0

如果你看到它說的錯誤...

package ZergZ.ZTeleport; 
      ^^^^^^^^^^^^^^^^^^^^ 
The package ZergZ.ZTeleport collides with a type 

所以基本上你創建你命名你的類和包的方式之間的衝突。如果你堅持到Java約定你能說出他們爲:

// Notice the first character of package name is small character 
package zergZ.zTeleport; 

// Class Name's first character is capital. 
public class ZTeleport implements IVoicedCommandHandler{ 
    .. 
}