如何打电话给班级'来自另一个类的主要功能

时间:2017-09-26 11:52:48

标签: java

这是我用于IRC课程的代码。

import org.jibble.pircbot.*;

public class IRCBotMain {

public static void main(String[] args) throws Exception {

    IRCBot bot = new IRCBot();
    bot.setVerbose(true);
    bot.connect("irc.freenode.net");
    bot.joinChannel("#pircbot");

}}

但是当我尝试做的时候

public class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        this.getLogger().log(Level.INFO, "Loading up!");
        IRCBotMain.main(null);
    }
}

这在另一个类中,编译器因Unhandled exception type Exception而失败。

谢谢大家,我解决了这个问题,但是在导出并运行之后。我收到此错误: https://pastebin.com/ZdDxYK2k 我已经遵循了这个(https://bukkit.org/threads/pircbot-how-to-install-import.132337/),但却发生了这种情况。 顺便说一句,我使用的是pircbot,而不是pircbotx。

2 个答案:

答案 0 :(得分:1)

您尝试调用的IRCBotMain.main()方法被声明为抛出Exception,因此无论您在何处调用该方法,都必须:

  • 抓住例外

或者

  • 声明要抛出的异常

例如:

@Override
public void onEnable() {
    try {
        this.getLogger().log(Level.INFO, "Loading up!");
        IRCBotMain.main(null);
    } catch (Exception ex) {
        // respond to this exception by logging it or wrapping it in another exception and re-throwing etc
    }
}

或者

@Override
public void onEnable() throws Exception {
    this.getLogger().log(Level.INFO, "Loading up!");
    IRCBotMain.main(null);
}

注意:第二种方法可能不是跑步者,因为重写的onEnable()方法可能不会被声明为抛出异常。

这些将避免您遇到的编译错误,但是从另一个类调用main方法有点不寻常。通常,main方法是Java应用程序的入口点,因此可以通过Java应用程序的任何启动来调用它。您在问题中使用的调用模式表明应用程序的一部分通过main方法调用另一部分。通过在IRCBotMain上调用非静态非主方法来做到这一点会更常见,例如

IRCBotMain bot = new IRCBotMain();
bot.run();

答案 1 :(得分:0)

在另一个类中调用main方法是不好的,只有你需要做的就是在onEnable的方法签名上添加'抛出异常。

public class Main extends JavaPlugin
{
    @Override
    public void onEnable throws Exception()
    {
        this.getLogger().log(Level.INFO, "Loading up!");
        IRCBotMain.main(null);
    }
}