2012-09-24 107 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'屬性。 –

相關問題