2012-09-24 57 views
-3

我的Java编译器将返回以下错误消息如何修复“无法从静态上下文中引用非静态方法”?

非静态方法的getParameter(字符串)不能从上线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

您的问题标题已修复以反映具体问题。现在请查看右侧的“相关”列表(还有[这里](https://www.google.com/search?q=%22non-static%20method%22%20%22cannot%20be%) 20referenced%20from%20A%20static%20context%22))。 – BalusC

回答

1

String Cliente4 = UtilMainApp.Cliente;

似乎Cliente是Non-static Variable,所以它必须是通过使UtilMainApp类的对象进行访问。

如:

UtilMainApp util = new UtilMainApp(); 

String Cliente4 = util.Cliente; 
+0

嗨,谢谢我尝试这个,但UtilMainApp其抽象类,我不能实例化 –

+0

@DiegoAlbarracin好吧...如果它的抽象类'你需要扩展UtilMainApp类',然后访问该Cliente字段扩展类,导致它非常重要的知道'字段不是多态的...' –

+0

我该怎么办?请! –

0

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

String Cliente4 = UtilMainApp.Cliente; 

要解决这个问题,你要的UtilMainApp实例传入构造为您ImageTab类,这样你将不得不使用来获取非静态属性Cliente参考。我还会注意到,这个属性不能被设置为静态,因为它是通过对超类中的getProperty()的非静态调用进行初始化的。其他

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

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

+0

嗨,但类UtilMainApp是抽象的,不能实例化 –

+0

你会传递这个类的子类。但重点是你需要提供这个对象,以便你可以从中获得'Cliente'属性。 –

相关问题