非静态方法不能从静态上下文引用--JAVA

时间:2013-02-11 18:57:02

标签: java

我试图将值t从一个类传递到另一个类,但在我运行程序之前,我从这行代码中得到non static method cannot be referenced from static context

t = (PrinterSettings.getT() * 60);

我想从这段代码中获取值t:

public int t = 1; //defualt value for amount of mintues in the future the job should wait untill sent

public int getT() {
            return (t);
        }

 public void setT(int t) {
            this.t = t;
         } 

我做错了什么?我怎么能得到

编辑:

我从

获取的所有代码
         public int t = 1; //defualt value for amount of seconds in the future the job should wait untill sent

    public int getT() {
        return (t);
    }

    public void setT(int t) {
        this.t = t;
    }

这是我正在使用的类,它从上面的类中调用t来使用:

public class DealyTillPrint {

    public int t;

    public String CompletefileName;
    private String printerindx;
    private static int s;
    private static int x;
    public static int SecondsTillRelase;

    public void countDown() {
        System.out.println("Countdown called");
        s = 1; // interval 
    t = ((new PrinterSettings().getT()) * 60); //(PrinterSettings.SecondsTillRelase); // number of seconds
        System.out.println("t is : " + t);
        while (t > 0) {
            System.out.println("Printing in : " + t);
            try {
                Thread.sleep(s * 1000);
            } catch (Exception e) {
            }
            t--;
        }

这是我使用微调器

设置t的地方
<p:spinner min="1" max="1000" value="#{printerSettings.t}"  size ="1">
                    <p:ajax update="NewTime"/>
                </p:spinner>

3 个答案:

答案 0 :(得分:2)

您正在使用PrinterSettings.getT(),但您不能这样做,因为PrinterSettings是一个类,而getT()方法是针对该对象的。您需要先创建一个PrinterSettings对象,然后调用getT()

PrinterSettings myObjectOfPrinterSettings = new PrinterSettings();
myObjectOfPrinterSettings.getT();  //this should work without the error

答案 1 :(得分:1)

您可以选择执行以下两项操作之一:

1)使您的PrinterSettings文件中的所有内容保持静态(并使PrinterSettings也是静态的):

public static int t = 1; 

public static int getT() {
            return (t);
        }

 public static void setT(int t) {
            this.t = t;
         } 

2)不要更改PrinterSettings,只需为您的代码执行此操作:

//Put this somewhere at the beginning of your code:
PrinterSettings printerSettings = new PrinterSettings();

//Now have some code, which will include setT() at some point

//Then do this:
t = (printerSettings.getT() * 60);

在我看来,后者更为可取。

编辑:我刚刚编辑的是因为如果你没有保留你正在使用的PrinterSettings变量,那么新的一个将在新的PrinterSettings对象中为t为1。相反,请确保在程序开始时实例化PrinterSettings对象,并在整个过程中使用它。

答案 2 :(得分:0)

而不是:

public int getT() {
            return (t);
        }
Write:

public static int getT() {
            return (t);
        }

这将解决您的问题。 通过此更改,您可以使用其类名访问此方法。作为一种课堂方法。