2010-01-20 9 views
0

Я написал код в matlab, который модулирует и демодулирует некоторые сигналы. Я развертываю их с помощью deploytool, а .jar работает в одном приложении без GUI, но дает мне Undefined variable "modem" or class "modem.pskmod". в приложении с графическим интерфейсом.Неопределенная переменная «модем» или класс «modem.pskmod» при вызове из java

В принципе, что я хочу знать, что может вызвать эту ошибку, поскольку я смотрю вокруг, я не нахожу много документации по этой ошибке.

Как я не понимаю, почему он работает в одном приложении, но не работает в другом, когда код, который я использую, почти аналогичен при вызове метода.

+0

Просто для уточнения ... у вас есть одно развернутое приложение, которое вызывает функцию 'modem.pskmod', * не использует графические интерфейсы и отлично работает. Затем у вас есть другое приложение, которое также вызывает функцию 'modem.pskmod', * does * использует графические интерфейсы и не работает (давая вам вышеуказанную ошибку). Это верно? – gnovice

+0

Да, вы правы. –

ответ

0

Хорошо, после большого тестирования и сравнения разницы между приложением без GUI и приложения с графическим интерфейсом. Я нашел решение своей проблемы.

В качестве приложения без графического интерфейса запуска инициализации метода с самого начала применения (есть только одна нить)
import matlabFunction.*;
public static void main(String[] args) {
matlabFunction test = new matlabFunction(); test.runFunction(1, lstABC.toArray());
}

Но в моем коде с GUI я запускаю метод инициализации из внутри JFrame (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) { 
      } 
     } 
    }); 
} 

Таким образом, я считаю, что причина моей проблемы не вызывая метод инициализации от «первого» потока, который запускает приложение.