由于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什么也没做。我认为这是一个糟糕的代码。谢谢你的回复!
答案 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毫秒