在Matlab中从Java GUI调用2个类

时间:2011-08-19 14:50:02

标签: java user-interface matlab camera

由于Java一旦使用就无法卸载本机库(在Matlab中;请参阅SO question),我试图在Matlab中调用2个GUI类。我正在努力从相机抓取图像,然后将其保存在磁盘上。我想使用一个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()时,Matlab什么也没做。我认为这是一个糟糕的代码。谢谢你的回复!

1 个答案:

答案 0 :(得分:1)

只是假设没有更多信息:

此检查:

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为假(MainWindow.fs_c现在为0)并且MainWindow.commandVal也设置为0.因此该方法不执行任何操作,除了休眠100毫秒