java静态访问以非静态方式

时间:2014-03-15 23:16:37

标签: java static

我的IRC Bot运行了一些游戏。我试图将所有代码分成不同的类。

其中一个是我下面的轮盘游戏:

if (message.equalsIgnoreCase("!spin")) { 
    if(Games.randomNumber(5) == 1){
        rroulette = sender;
        Games.russianroulettefail(channel);
    }else{
        rroulette = sender;
        Games.russianroulettewin(channel);
    }
}

我的Game类扩展了MyBot,因此我可以访问我需要的所有字符串。

//////////////////////////////////////////////////////////
/// Russisch Roulette Generator (fail)
//////////////////////////////////////////////////////////    
public static void russianroulettefail(String channel){
    rngroulette = randomNumber(1);
    switch(rngroulette){
       case 0:
            if(englishmode == true){
                sendMessage(channel, rroulette+" Aims towards his Head and pulls the Trigger... PENG. "+rroulette+" Shot himself. RIP");
            }else{
           sendMessage(channel,""+rroulette+" richtet den Revolver auf seinen Kopf und drückt ab.... PENG!!! Der Schuss löst sich und die Menge ist geschockt!  R.I.P "+rroulette+"");
            }//sendMessage(channel,"/timeout "+rroulette+"");
            if(englishmode == true){
                sendMessage(channel, rroulette+" Lost 100 "+coinname+"");
            }else{
           sendMessage(channel, rroulette+" Verliert 100 "+coinname+"");
            }

            int coinanzahl = 0;

        try {
            coinanzahl = MySQLAccess.getcoins(rroulette);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

            int newtotalcoins;
            newtotalcoins = coinanzahl-100;

        try {
            MySQLAccess.setcoins(rroulette, newtotalcoins);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

           rroulette = null;
        break;
 }
 }

我收到此错误:

  

无法从类型游戏

中对非静态方法进行静态引用russianroulettewin(String)

但是一旦我将方法设置为静态,我就会在游戏类中得到错误:

  

无法从类型PircBot

中对非静态方法sendMessage(String,String)进行静态引用

这有什么变通方法吗?

1 个答案:

答案 0 :(得分:1)

您有两种选择:

  • 将所有方法设为静态或
  • 实例化包含russianroulettefail的类。 注意:russianroulettefail应该像russianRouletteFail一样大写。

后一种选择可能是传统的选择,但前者更容易。我建议暂时将static放在所有方法和变量声明之前。为了准备未来,你应该阅读一个关于类和OOP(面向对象编程)的优秀教程,如下所示:http://docs.oracle.com/javase/tutorial/java/javaOO/objects.html