如何在不使静态的情况下调用一个类

问题描述:

我试图调用类Player,但它要求我将一些方法更改为静态,从而创建800个警告并破坏我的整个服务器。 唯一的解决方案是修复800个警告? (告诉我访问该方法以静态方式如何在不使静态的情况下调用一个类

有几件事情需要注意:? 我需要做的是没有把Player播放器的方法,如: 公共无效方法名(Player播放器){ 并做到这一点不通过构造函数,因为我已经不能适用于我想要做的代码构造。

整个方法是这样的

public static void main(String args[]) throws Exception { 
    //args = new String[] { "true", "false", "true" }; 
    if (args.length != 3) { 
     System.err.println("USE: guimode(boolean) debug(boolean) hosted"); 
     return; 
    } 
    Config.HOSTED = Boolean.parseBoolean(args[2]); 
    Config.DEBUG = Boolean.parseBoolean(args[1]); 
    long currentTime = System.currentTimeMillis(); 
    Logger.log("Launcher", "Initiating Cache..."); 
    Cache.init(); 
    ItemEquipIds.init(); 
    Huffman.init(); 
    Logger.log("Launcher", "Initiating Data Files..."); 
    IPBanL.init(); 
    PkRank.init(); 
    TeleportLocations.initTeleportLocations(); 
    DTRank.init(); 
    MapContainersXteas.init(); 
    MapAreas.init(); 
    ObjectSpawns.init(); 
    NPCSpawns.init(); 
    NPCCombatDefinitionsL.init(); 
    NPCBonuses.init(); 
    NPCDrops.init(); 
    ItemExamines.init(); 
    ItemBonuses.init(); 
    ShopsHandler.init(); 
    NPCDefinitions.getNPCDefinitions(20); 
    Logger.log("Launcher", "Initiating Fishing Spots..."); 
    FishingSpotsHandler.init(); 
    Logger.log("Launcher", "Initiating NPC Combat Scripts..."); 
    CombatScriptsHandler.init(); 
    Logger.log("Launcher", "Initiating Dialogues..."); 
    DialogueHandler.init(); 
    Logger.log("Launcher", "Initiating Controlers..."); 
    ControlerHandler.init(); 
    Logger.log("Launcher", "Initiating Cutscenes..."); 
    CutscenesHandler.init(); 
    Logger.log("Launcher", "Initiating Friend Chats Manager..."); 
    FriendChatsManager.init(); 
    Logger.log("Launcher", "Initiating Cores Manager..."); 
    CoresManager.init(); 
    Logger.log("Launcher", "Initiating World..."); 
    World.init(); 
    Logger.log("Launcher", "Initiating Region Builder..."); 
    RegionBuilder.init(); 
    Logger.log("Launcher", "Initiating Server Channel Handler..."); 
    NPCSpawner.spawnNPCS(); 
    try { 
     ServerChannelHandler.init(); 
    } catch (ChannelException e) { 
     e.printStackTrace(); 
     Logger.log("Launcher", 
       "Failed Initiating Server Channel Handler. Shutting down..."); 
     System.exit(1); 
     return; 
    } 
    // Logger.log("Launcher", "Initiating Server Manager..."); 
    // ServerManager.main(null); 
    System.err.println("Server took " 
      + (System.currentTimeMillis() - currentTime) 
      + " miliseconds to start up."); 
    addAccountsSavingTask(); 
    addCleanMemoryTask(); 
    for (;;) 
    { 
     try { 
      Thread.sleep(10000); 
      player.sendMessage("[Server Message]: Remember to vote!"); 
      Thread.sleep(10000); 
      player.sendMessage("[<img=1>Server Message<img=1>]: Donate to Lubricant and ONLY Lubricant!"); 
      } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
    } 
} 

另外请注意,我不能改变我的构造函数的球员,或有一个没有任何启动的新构造函数(IE公共播放器{}) 这里是我的球员构造:

公共类播放器扩展实体{

public Player(String password) { 
    super(Config.START_PLAYER_LOCATION); 
    trampAmount = 1; 
    setHitpoints(100); 
    this.password = password; 
    appearence = new Appearence(); 
    inventory = new Inventory(); 
    equipment = new Equipment(); 
    skills = new Skills(); 
    combatDefinitions = new CombatDefinitions(); 
    prayer = new Prayer(); 
    bank = new Bank(); 
    controlerManager = new ControlerManager(); 
    musicsManager = new MusicsManager(); 
    emotesManager = new EmotesManager(); 
    friendsIgnores = new FriendsIgnores(); 
    dominionTower = new DominionTower(); 
    charges = new ChargesManager(); 
    runEnergy = 100; 
    allowChatEffects = true; 
    mouseButtons = true; 
    pouches = new int[4]; 
    killedBarrowBrothers = new boolean[6]; 
    SkillCapeCustomizer.resetSkillCapes(this); 
} 
+1

你究竟在哪里使用Player player = new Player(“password”); ? – 2012-02-11 06:59:28

+0

多个类。 – 2012-02-11 07:02:06

+1

你打电话给班级玩家是什么意思?你不能调用一个类,只能调用一个方法。你能给出更明确的代码来说明问题吗?上面的代码包含了很多与实际问题没有关系的代码。还缺少像声明和播放器初始化那样的部分。 – Eelke 2012-02-11 07:21:10

不知道一下,你是怎样使播放器类的对象具有main()方法的类中。由于您在主方法的范围之外创建对象,它本质上是静态的,所以它告诉您不能在静态上下文中使用非静态变量。所以为此,您可以将static关键字添加到您的Player变量中,以使其工作。请检查代码片段,并检查,你的情况是否也可以使用。

public class StaticVariable 
{ 
    static One one = new One("New Password"); // This is what I mean, you can do. 

    public static void main(String... args) 
    {  
     StaticVariable.one.callMe(); // That's how you will call your methods now. 
    } 
} 

class One 
{ 
    String password; 

    public One(String p) 
    { 
     password = p; 
    } 

    public void callMe() 
    { 
     System.out.println("I am callMe method of class One."); 
     System.out.println(password); 
    } 
} 

否则你必须提供良好的SSCCE,该类的主要方法。