Java:无法调用重载构造函数

Java:无法调用重载构造函数,java,constructor,Java,Constructor,在这里,我试图在我的主程序(由变量a给出)中满足某些条件后调用重载构造函数。当我只使用默认构造函数时,代码运行良好,但我需要在某个点调用重载构造函数,结果失败。以下是代码: 重载构造函数: public Paddle(int a){ if(a ==1){ ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1)); image = ii.getImage(); } else

在这里,我试图在我的主程序(由变量a给出)中满足某些条件后调用重载构造函数。当我只使用默认构造函数时,代码运行良好,但我需要在某个点调用重载构造函数,结果失败。以下是代码:

重载构造函数:

public Paddle(int a){

   if(a ==1){
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1));
       image = ii.getImage();
   }
   else {
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle2));
       image = ii.getImage();
   }
    width = image.getWidth(null);
    height = image.getHeight(null);
  resetState();
  }

//      further initialization --
 public Paddle(){

        ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle));
        image = ii.getImage();

        width = image.getWidth(null);
        height = image.getHeight(null);
        System.out.println(height+" "+width);
        resetState();
 }
默认构造函数:

public Paddle(int a){

   if(a ==1){
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle1));
       image = ii.getImage();
   }
   else {
       ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle2));
       image = ii.getImage();
   }
    width = image.getWidth(null);
    height = image.getHeight(null);
  resetState();
  }

//      further initialization --
 public Paddle(){

        ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle));
        image = ii.getImage();

        width = image.getWidth(null);
        height = image.getHeight(null);
        System.out.println(height+" "+width);
        resetState();
 }
提前感谢您的帮助,可以进一步询问,但我认为这段代码有一些问题。谢谢你的回答 您没有在重载构造函数中设置实例变量映像

正道 你做这件事的方式是违反规则的,不要重复你自己

最好的方法是让无参数构造函数调用重载的构造函数,然后在一个地方设置实例变量image

public Paddle(final int i) 
{ 
   if (i==1) { this.image = one thing } 
   else 
   { this.image = another thing } 
}

public Paddle() { this(0); }
更好的方法是只将资源传递给单个构造函数并使用它,而不查看所有代码,这看起来太复杂了。

您没有在重载构造函数中设置实例变量映像

正道 你做这件事的方式是违反规则的,不要重复你自己

最好的方法是让无参数构造函数调用重载的构造函数,然后在一个地方设置实例变量image

public Paddle(final int i) 
{ 
   if (i==1) { this.image = one thing } 
   else 
   { this.image = another thing } 
}

public Paddle() { this(0); }


更好的方法是只将资源传递给单个构造函数并使用它,而不查看所有代码,这看起来过于复杂。

很难读取第一段代码。你能把它格式化成你的第二段代码吗?编辑:谢谢你的新格式!你说失败是什么意思?如果有stacktrace,发布它。格式化完成程序编译成功,但在构造函数调用edit时出现一些运行时错误:我将尝试获取堆栈跟踪,在Padle1和Padle是指向资源的有效链接之前从未使用过。代码不足。也许Packer1是错误的,也许您应该在if案例之前声明ImageIcon ii。程序在哪一行中断?失败的是什么?你应该发布一个堆栈跟踪。很难读取你的第一个代码块。你能把它格式化成你的第二段代码吗?编辑:谢谢你的新格式!你说失败是什么意思?如果有stacktrace,发布它。格式化完成程序编译成功,但在构造函数调用edit时出现一些运行时错误:我将尝试获取堆栈跟踪,在Padle1和Padle是指向资源的有效链接之前从未使用过。代码不足。也许Packer1是错误的,也许您应该在if案例之前声明ImageIcon ii。程序在哪一行中断?失败的是什么?你应该发布一个堆栈跟踪。我们知道吗?他没有向我们展示他的1-arg构造函数的其余部分。这也没用。我将尝试解释这种情况:有一个主类,根据条件设置了a的值,从而加载了构造函数。对于初始默认情况,当构造函数没有参数时,它可以正常工作,但当调用带参数的构造函数时,游戏停止。您必须看到异常的堆栈跟踪打印到标准输出。如果在Eclipse中,请查看Console视图。如果在其他IDE中,请查看与之等效的代码。如果在命令行上,使用java而不是javaw来查看文本窗口中的输出,或者使用java控制台。我使用的是NetBeans IDE,我尝试获取堆栈跟踪,我是新手,我们知道吗?他没有向我们展示他的1-arg构造函数的其余部分。这也没用。我将尝试解释这种情况:有一个主类,根据条件设置了a的值,从而加载了构造函数。对于初始默认情况,当构造函数没有参数时,它可以正常工作,但当调用带参数的构造函数时,游戏停止。您必须看到异常的堆栈跟踪打印到标准输出。如果在Eclipse中,请查看Console视图。如果在其他IDE中,请查看与之等效的代码。如果在命令行上,使用java而不是javaw来查看文本窗口中的输出,或者使用java控制台