YouTheB
本帖最后由 Windowsredstone 于 2019-9-13 18:40 编辑

今天心血来潮,把插件代码重写了,顺便把类名改了,把一些扔在Main里边的函数独立建了Class,onCommand一些没动。

然后我将重启服务器(不是reload),插件载入之后发现……



然后我查看我的代码……17行……

等等?



这也能错?

add:








add2:

问题已解决。我写了两个插件主类都叫做Main,所以……

把Main改成Mian就好了(滑稽)


gooding300
本帖最后由 gooding300 于 2019-9-12 22:38 编辑

跳过Java基础的Bukkit玩家.jpg

Java编译器会在没有构造器的时候自动补全默认的构造器,以上述代码为例,补全的内容为:
  1. public Main(){
  2.     super();
  3. }
复制代码

构造器在字节码中命名为<init>,其desc为()V,也就是调用栈中划红线的那一行,因为分配其他行数不合适,所以分配了类定义那一行的行数。
这个方法的代码中,super调用的是父类JavaPlugin的无参构造方法<init>()V,也就是划红线的上一行。
也就是说,是类构造过程中出的错。

如果我对您的问题有所帮助,请给我最高的评分!

Bryan33
因为在构造器上有一个隐含的super()
构造插件主类的时候会检查是否已经初始化过这个插件
不过问题不在这
如果插件已经被初始化则会抛出异常
你这个报错原因多半是你new了你的插件主类 或者有多个插件的plugin.yml里的main指向了同一个类

吕易天
本帖最后由 吕易天 于 2019-9-13 09:38 编辑

上面说了,插件已经载入,你重复放了2个同样名称的插件吧
如上所述,当一个子类被构建时会调用父类的构造方法,于是在父类的构造方法抛出了异常所以就显示了那个行号

第一页 上一页 下一页 最后一页