在由另一个方法创建的对象上调用方法?

时间:2013-12-01 01:07:08

标签: java swing jframe

咬了一下我的Java代码。我已经调整了下面的代码来给出一个简单的例子,答案仍然适用。基本上,

我有三个类文件:GUI,main,pipe1。

我的GUI接受变量的一些值:lengthheight。 然后它调用main.makePipe,这是一个包含if语句的静态方法,然后创建一个名为pipe1的新createdPipe。样品:

  public static void makePipe(double length, double width){
    if(length > 0 && length < 4){
        pipe createdPipe = new pipe1(length, height);

现在我的新createpipe对象有一个名为basicCost的方法,它返回管道的成本:

protected void calculateCost(){
   double basicCost = height * length + 300;
   return basicCost;
   }

我一直坚持如何将这个返回值一直带回GUI类? 如果我运行(在我的GUI类中):

createdpipe.calculateCost();
它说无法找到符号。这是正确的。 如果我在main中创建一个方法并放入:

public double finalCost(){
pipeCost = createdPipe.calculateCost();
return pipeCost;
}

并尝试从我的GUI(main.finalCost)调用它我得到一个:非静态方法不能从静态上下文中引用。

我理解为什么,但是有人能告诉我如何让GUI类知道这个对象,或者我可以在pipe1类上计算数据并将数据返回给要使用的GUI类吗?

1 个答案:

答案 0 :(得分:1)

createdPipe是一个局部变量,因此您需要更改此变量的范围。

你应该在main中声明对createdPipe对象的静态变量引用,如下所示:

private static pipe1 createdPipe;

更改makePipe方法,因此它将创建createdPipe:

public static void makePipe(double length, double width){
    if(length > 0 && length < 4){
        createdPipe = new pipe1(length, height); 

然后你应该将finalCost声明为静态方法:

public static double finalCost()    

因为createdPipe可以为null,你应该在finalCost方法中检查createdPipe是否为null。