2012-09-24 2 views
-3

내 자바 컴파일러는 다음과 같은 오류 메시지가 반환"정적이 아닌 메소드를 정적 컨텍스트에서 참조 할 수 없습니다"를 어떻게 수정합니까?

비 정적 방법의 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

구체적인 문제를 반영하여 질문 제목이 수정되었습니다. 이제 오른쪽의 '관련'목록 (및 [여기] (https://www.google.com/search?q=%22non-static%20method%22%20%22cannot%20be%)을 확인하십시오. 20 참조 % 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; 

이 문제를 해결하려면, 당신은 당신이 아닌 정적 속성 Cliente을 얻기 위해 사용하는 기준이있을 것이다, 그래서 당신의 ImageTab 클래스의 생성자에 UtilMainApp의 인스턴스를 전달해야합니다. 또한이 속성은 수퍼 클래스의 getProperty()에 대한 비 정적 호출을 통해 초기화되므로 static으로 설정할 수 없습니다.

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

기타 참고 사항 - 소문자로 시작하는 모든 속성의 이름을 지정하는 것이 좋습니다. 이것은 클래스 이름과 속성 이름을 혼동하는 것입니다. 이 규칙을 따르지 않기 때문에 코드를 작성하기가 매우 어렵습니다.

+0

안녕하지만 클래스 UtilMainApp은 추상입니다. 인스턴스화할 수 없습니다 –

+0

이 클래스의 하위 클래스를 전달하게됩니다. 하지만 요점은이 객체를 제공해야만 Cliente 속성을 얻을 수 있다는 것입니다. –

관련 문제