-2

我的 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...

这是如何引起的,我该如何解决?

4

2 回答 2

2

String Cliente4 = UtilMainApp.Cliente;

似乎 Cliente 是一个Non-static Variable,所以必须通过创建 UtilMainAppClass 的对象来访问它。

例如:

UtilMainApp util = new UtilMainApp();

String Cliente4 = util.Cliente;
于 2012-09-24T16:06:22.930 回答
1

错误在这里,您以静态方式引用非静态变量。 UtilMainApp是一个类,而不是一个属性。因此,当没有以这种方式定义时,您所引用Cliente的好像每个类(静态)只有一个。

String Cliente4 = UtilMainApp.Cliente;

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

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

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

于 2012-09-24T16:10:10.983 回答