我的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...
这是如何引起的?如何解决?
答案 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()
另一个注意事项 - 最好将所有属性命名为以小写字母开头。这是为了确保您将类名与属性名混淆。您的代码很难遵循,因为您没有遵循此约定。