2014-02-13 2 views
1

java으로 작성된이 간단한 코드가 있습니다. 이 거기에 내가 CHECK_BOX_CALIB_METH라는 이름의 객체를 생성 한 KmaxJava에서 메소드를 호출 할 때 식별자가 예상되는 오류

import kmax.ext.*; 

public class Runtime implements KmaxRuntime { 
    KmaxToolsheet tlsh; // Store a reference to the toolsheet environment 
    KmaxHist hist1D; 
    KmaxWidget checkBoxWidget; 

    public void init(KmaxToolsheet toolsheet) { 
     tlsh = toolsheet; // Save this reference for use in the toolsheet 
     hist1D = tlsh.getKmaxHist("HIST1D"); 
     checkBoxWidget = tlsh.getKmaxWidget("CHECK_BOX_CALIB_METH"); 
     tlsh.getKmaxWidget("CHECK_BOX_CALIB_METH").setProperty("VALUE", "1"); 

    } 

    public void CalibInit(KmaxWidget widget, KmaxHist histo){ 
     histo.setUseXAxisCalibration(stringToBool(widget.getProperty("VALUE"))); 
     histo.update(); 

    } 
    CalibInit(checkboxWidget,hist1D); 

    public void GO(KmaxToolsheet toolsheet){} 
    public void SRQ(KmaxDevice device) {} 
    public void HALT(KmaxToolsheet toolsheet) {} 

} // End of the Runtime object 

주의라고하는 DAQ 프레임 워크에서 실제로. 이 코드를 컴파일 할 때 나는 내가 CalibInit 방법을 제거하고

public void CHECK_BOX_CALIB_METH(KmaxWidget widget) { 

    hist1D.setUseXAxisCalibration(stringToBool(widget.getProperty("VALUE"))); 
    hist1D.update(); 

} 

로 교체하면 내가 더 컴파일 오류가 없다는 것을 이러한 오류 메시지

compiler msg>error: invalid method declaration; return type required 
compiler msg> CalibInit(checkboxWidget,hist1D); 
compiler msg> ^

compiler msg>error: <identifier> expected 
compiler msg>CalibInit(checkboxWidget,hist1D); 
compiler msg>      ^


compiler msg>error: <identifier> expected 
compiler msg>CalibInit(checkboxWidget,hist1D); 
compiler msg>        ^

주를 얻는다. 키포인트는 메소드의 이름이 객체의 이름과 동일하다는 것입니다. 내가 CalibInit()을 만든 이유는 동일한 기능을 가진 동일한 유형의 모든 객체에 대해 각 메소드를 사용하지 않기 위해서입니다. 주위에 방법이 있습니까?

이러한 오류를 방지하려면 어떻게해야합니까?

답변

1

자신의 라인에 코드

CalibInit(checkboxWidget,hist1D); 

는 방법 중 내부 없습니다. 컴파일러는 이것이 여러분이 원하는 것이 아닌 새로운 메소드 선언이라고 가정합니다.

사이드 노트 :
대문자로 시작하는 메서드는 사용하지 않는 것이 좋습니다. "메서드는 동사이어야하며 대문자와 소문자를 구분하지 않고 각각의 내부 단어의 첫 문자를 대문자로 사용해야합니다." Code Conventions for the Java Programming Language

+0

도움 주셔서 대단히 감사합니다! – Thanos

2

변수 만 메서드 측면을 선언 할 수 있습니다. 메서드와 생성자에서만 메서드를 호출 할 수 있습니다 (정적 컨텍스트를 여기에서 피하십시오).

CalibInit(checkboxWidget,hist1D); 

필요한 경우 해당 행을 모든 메소드 또는 생성자로 이동하십시오. 더 구체적으로 당신이 필요로하는 곳에 전화하십시오.

짧은 :CalibInit(checkboxWidget,hist1D);은 이제 고아입니다. 그것이 무엇인가에 속하게하십시오.

+0

시간을내어 도와 주셔서 감사합니다. – Thanos

1

에서 당신은 당신이하고있는 것처럼 클래스에 직접

CalibInit(checkboxWidget,hist1D); 

를 호출 할 수 없습니다. 런타임의 인스턴스가 생성 될 때이를 호출하는 것이 목적이라면이 명령어는 생성자 내부에 있어야합니다.

BTW : Java에서 규칙에 따라 소문자로 시작하는 메서드는 런타임 클래스를 호출하면 안됩니다. 표준 런타임 클래스가 이미 표준 라이브러리에 있으므로이 메서드는 사람들을 혼란스럽게합니다.

+0

도움과 조언을 해주셔서 감사합니다. 나는 그것을 배우기 위해 최선을 다할 것입니다. 다시 한번 감사드립니다! – Thanos

1

어떤 방법이든 클래스에서 직접 CalibInit (checkboxWidget, hist1D) 메서드를 호출하고 있습니다. Java는 이것을 지원하지 않습니다.

+0

대단히 감사합니다! – Thanos

관련 문제