2010-01-20 4 views
0

일부 신호를 변조 및 복조하는 코드를 matlab에 작성했습니다. deploytool을 사용하여 배포하고 .jar은 GUI없이 하나의 응용 프로그램에서 작동하지만 GUI가있는 응용 프로그램에서 Undefined variable "modem" or class "modem.pskmod".을 제공합니다.Java에서 호출 할 때 정의되지 않은 변수 "modem"또는 클래스 "modem.pskmod"

기본적으로, 내가 둘러 본 것처럼이 오류가 발생하는 원인을 알고 싶습니다.이 오류에 대한 많은 문서를 찾을 수 없습니다.

하나의 응용 프로그램에서 작동하는 이유는 모르겠지만 사용하는 코드가 메서드를 호출 할 때 거의 비슷할 때 다른 응용 프로그램에서는 작동하지 않습니다.

+0

분명히하기 위해 ... 당신은'modem.pskmod' 함수를 호출하고, * GUI를 사용하지 않으며, 잘 작동하는 하나의 배포 된 응용 프로그램을 가지고 있습니다. 그런 다음'modem.pskmod' 함수를 호출하는 또 다른 응용 프로그램을 가지고 있습니다. * GUI는 GUI를 사용하고 작동하지 않습니다 (위의 오류를 제공함). 이 올바른지? – gnovice

+0

네, 맞습니다. –

답변

0

Ok, GUI가없는 응용 프로그램과 GUI가있는 응용 프로그램의 차이를 많이 테스트하고 비교 한 후. 내 문제에 대한 해결책을 찾았습니다. 응용 프로그램의 시작부터 방법 초기화 GUI를 실행하지 않고 응용 프로그램으로


import matlabFunction.*;
public static void main(String[] args) {
matlabFunction test = new matlabFunction(); test.runFunction(1, lstABC.toArray());
}

(하나 개의 스레드 만이있다) 그러나 GUI 내 코드에서 나는 (JFrame에 내에서 init 메소드를 실행 main()은 EDT 안에있는

public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() {

 public void run() { 
      try { 

       new main(); 
      } catch (Exception p) { 
      } 
     } 
    }); 
} 

위의 방법으로 matlab 메소드를 초기화 할 때 오류가 발생합니다. 하지만 아래와 같이 init 메소드를 호출하는 방식을 변경하면 오류가 해결됩니다.

public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() {

 public void run() { 
      try { 
       matlabFunction test = new matlabFunction(); 
       new main(test); 
      } catch (Exception p) { 
      } 
     } 
    }); 
} 

그래서, 나는 내 문제에 대한 이유는 응용 프로그램을 시작합니다 "첫 번째"스레드에서 init 메소드를 호출하지 않습니다 생각합니다.