Вызов 2 классов из Java GUI в Matlab - PullRequest
1 голос
/ 19 августа 2011

Поскольку Java не может выгружать нативные библиотеки при использовании (в Matlab; см. SO вопрос ), я пытаюсь вызвать 2 класса GUI из Matlab.Я работаю над захватом изображения с камеры и сохранением его на диске.Я хочу использовать один класс Java для связи с камерой, в то время как другой класс (GUI) все еще открыт в Matlab.Это возможно?Вот код:

1.

 public class GUI
    {

    public static void main(String[] args)
    {
    // Just open up the window and start things running
    MainWindow mWindow = new MainWindow();
    }

    public static void main2()
    {
        MainWindow.grabImage(0);
    }
}

2.

public class MainWindow

{

static volatile int commandVal;
        Thread updateThread;
        static CameraImage cImage;
static int fs_c =1;
    MainWindow(){

    JFrame main_f = new JFrame("M");
        main_f.getContentPane().setLayout(new BorderLayout());
        main_f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        main_f.getContentPane().add(tabPane1, "Center");

        main_f.pack();
        main_f.setVisible(true);
                kkk = 1;

        mySerial = new CameraSerial(cWindow.getPort());
}
}

3.

public static void grabImage(int commandVal){

                   while (MainWindow.kkk == 1) {
                       if (MainWindow.fs_c == 1) {
                        MainWindow.commandVal = 5;
            }
            if (MainWindow.commandVal == 5 || MainWindow.commandVal == 6){

                cImage.sendFrame(0);
                                JFileChooser save_d = new JFileChooser();
                                File saveFile = save_d.getSelectedFile();
                cImage.writeImage(saveFile + ".jpg");

                                MainWindow.fs_c = 0;
                                MainWindow.commandVal = 0;
                                mySerial.write("\r");
                                System.out.println("Camera Ready...");

break;

                        }

                else if (commandVal == -1) {
                MainWindow.commandVal = 0;
                        mySerial.write("\r");
                                status_t.setText("Camera Ready...");
            }
                       else {
                try {
                    Thread.sleep(100);

                } catch (Exception e) {
                }
            }
        }

}

Из Matlab я звоню сначала Gui.main([]), а затем Gui.main2().Работает впервые.Но когда я снова звоню Gui.main2(), Матлаб ничего не делает.Я думаю, что это плохой код где-то.Спасибо за ответ!

1 Ответ

1 голос
/ 19 августа 2011

Просто предположение, без дополнительной информации:

Эта проверка:

if (MainWindow.fs_c == 1) {
  MainWindow.commandVal = 5;
}

И позже (обратите внимание, что commandVal будет 5 после первой успешной проверки):

MainWindow.fs_c = 0;
MainWindow.commandVal = 0;

Вот проблема:

В первом запуске commandVal устанавливается в 5, предполагая, что MainWindow.fs_c изначально равен 1. Таким образом, MainWindow.fs_c = 0; выполняется.

Во втором запуске MainWindow.fs_c == 1 имеет значение false (MainWindow.fs_c теперь равно 0), а MainWindow.commandVal также был установлен на 0. Таким образом, метод ничего не делает, за исключением сна в течение 100 миллисекунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...