如何修复“无法从静态上下文引用非静态方法”?

时间:2012-09-24 16:02:00

标签: java static

我的Java编译器返回以下错误消息

  

非静态方法getParameter(String)不能从静态上下文引用

String Cliente4 = UtilMainApp.Cliente行。

我有以下课程:UtilMainApp.java

package uk.co.mmscomputing.util;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.beans.*;
import javax.swing.*;

import uk.co.mmscomputing.util.log.LogBook;

abstract public class UtilMainApp extends JApplet{

  private Properties properties=new Properties();
  private File       propertiesFile;
  private JFrame     frame = null;

  public String Cliente = getParameter("id"); // I need use this variable


... etc...

ImageTab.java

package uk.co.mmscomputing.application.imageviewer;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.print.*;
import java.io.*;
import java.util.*;                // as of 1.5.0 java.util has class Scanner
import javax.imageio.*;
import javax.imageio.stream.*;
import java.beans.*;
import java.net.URL;
import java.net.URLConnection;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.imageio.metadata.*;

import uk.co.mmscomputing.util.UtilMainApp;
import uk.co.mmscomputing.util.JarImageIcon;
//import uk.co.mmscomputing.imageio.*;
import uk.co.mmscomputing.image.operators.*;

public class ImageTab extends JPanel implements PropertyChangeListener{

  static public final String fileOpenID="uk.co.mmscomputing.file.open.dir";
  static public final String fileSaveID="uk.co.mmscomputing.file.save.dir";

  protected Properties   properties;
  protected JTabbedPane  images;
  protected JFileChooser openfc;
  protected JFileChooser savefc;


 ... etc...

    //UtilMainApp mc = new UtilMainApp(); //This is the part when I compile have an error
    String Cliente4 = UtilMainApp.Cliente;
    String Usuario;
    Usuario = Cliente4;
    JOptionPane.showMessageDialog(null, Usuario);

...etc...

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分:2)

String Cliente4 = UtilMainApp.Cliente;

Cliente似乎是Non-static Variable,因此必须通过制作 UtilMainApp Class的对象来访问它。

<强>例如

UtilMainApp util = new UtilMainApp();

String Cliente4 = util.Cliente;

答案 1 :(得分:1)

错误在这里,您以静态方式引用非静态变量。 UtilMainApp是一个类,而不是属性。所以你引用Cliente就好像每个类中只有一个(静态),如果没有这样定义的话。

String Cliente4 = UtilMainApp.Cliente;

要解决此问题,您必须将UtilMainApp的实例传递到ImageTab类的构造函数中,以便您将使用引用来获取非静态属性{{ 1}}。我还要注意,这个属性不能设置为static,因为它是通过超类中对Cliente的非静态调用初始化的。

getProperty()

另一个注意事项 - 最好将所有属性命名为以小写字母开头。这是为了确保您将类名与属性名混淆。您的代码很难遵循,因为您没有遵循此约定。