如何在不使静态的情况下调用一个类
问题描述:
我试图调用类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);
}
答
不知道一下,你是怎样使播放器类的对象具有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,该类的主要方法。
你究竟在哪里使用Player player = new Player(“password”); ? – 2012-02-11 06:59:28
多个类。 – 2012-02-11 07:02:06
你打电话给班级玩家是什么意思?你不能调用一个类,只能调用一个方法。你能给出更明确的代码来说明问题吗?上面的代码包含了很多与实际问题没有关系的代码。还缺少像声明和播放器初始化那样的部分。 – Eelke 2012-02-11 07:21:10