Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中调用不带参数的方法_Java_Methods - Fatal编程技术网

在Java中调用不带参数的方法

在Java中调用不带参数的方法,java,methods,Java,Methods,我有这样一个代码: import com.eteks.sweethome3d.SweetHome3D; import com.eteks.sweethome3d.model.Home; public class Test extends SweetHome3D { public static void main(String [] args) { new Test().init(args); } @Override public Home createHome() {

我有这样一个代码:

import com.eteks.sweethome3d.SweetHome3D;
import com.eteks.sweethome3d.model.Home;

public class Test extends SweetHome3D {
  public static void main(String [] args) {
    new Test().init(args);
  }

  @Override
  public Home createHome() {
    Home home = super.createHome();
    // Modify home as you wish here
    return home;
  }
}
我想通过main运行我的方法。 你知道我怎么做吗?我尝试过很多方法,比如:

createHome();

super.createHome();
但它不识别这种类型。 我也试过了

Test test = new Test();
  test.init(args);
  test.createHome();
这不会产生任何错误,但我想要的仍然没有完成。 他们还建议我“不要直接调用test.createHome();”

提前感谢:)


问题是,现在它运行我的应用程序,但当我把这个

System.out.println("method called");

在我的方法中,它显示两次。。。???为什么?

调用
test.createHome()
没有问题,它应该是这样工作的

为了检查是否调用了该方法,可以在
createHome()
方法中放入
System.out.println(“调用的方法”)


您的问题可能在其他地方,可能在超类中。

问题在于静态方法和实例方法之间的区别。createHome是一个实例方法,这意味着您必须拥有该类的实例才能调用该方法。这就是为什么您可以调用createHome()因为test是test的实例,所以从您的测试变量中删除。main方法是一个静态方法,它与Class test关联,并且它没有调用该方法的test实例。类与从该类创建的实例是不同的内存块。但是,类可以有与之关联的方法和变量它是通过使用static关键字来实现的

现在,它不起作用的原因可能更多地与您的代码以及它对何时可以调用该方法所做的假设有关因为系统尚未完全启动。看起来像一个UI程序,所以可能在计时和处理事件方面存在一些问题


很难知道为什么它在没有特定错误的情况下对您不起作用。

事实上,它被调用了3次,正如它在控制台中显示的那样,但不是预期的结果…我如何间接运行它?没有“间接调用”这类东西。如果您的超类有一些方法可以初始化并返回一个Home,那么可能就是它,但是t否则,您的做法是正确的。如果调用3次,则表示您调用了3次。至于超类,没有问题,因为我使用开源程序来创建应用程序:(如果您显示的代码都是您的代码,并且可以肯定超类是如何工作的,那么问题在于您对超类如何工作的理解。我想是的……好吧,明天我必须用新的眼光来看它:)谢谢“他们”是谁?他们为什么建议您不要直接调用createHome()?我打赌这就是它不工作的原因。如果“他们”“是正确的。我使用一个开源应用程序(Sweethome3d),我正在尝试修改“他们”的代码。“他们”告诉我不应该直接将其隔离。我还尝试了new Test()。init(args);,它调用了该方法两次。好的,那么如果init()的话,你就不需要调用该方法了已经在调用它。所以,您应该做的是简单地重写它,在createHome()中实现您的逻辑(确保调用super),然后在main中执行new Test().init(args)。它会工作的。现在为什么工作,您需要进一步研究Java以了解方法重写的工作原理。例如:(Test.createHome())线程“main”中的异常java.lang.Error:未解决的编译问题:无法从com.eteks.sweethome3d.Test.main(Blender.java:93)上的类型测试对非静态方法createHome()进行静态引用,如我在回答中所述,没有方法Test.createHome()因为这将是一个静态方法。从您的代码和错误来看,显然没有静态方法createHome()。这就是错误告诉您的。这不是您显示的最后一段代码的编译输出。您可能有一些旧的编译代码。我建议您使用正确的代码重建项目,然后重新部署。