2011-04-26 23 views
2

我正在用matlab ui編寫一個java應用程序。 爲此,我使用Java對象在MATLAB如下解釋: http://www.mathworks.com/help/techdoc/matlab_external/f4873.html在matlab中使用java類的清理問題

我想要做的就是創建一個MATLAB函數是這樣的:

function [] = foo 
    o = javaObject('myObject',parameters...); 
    o.memberfunction(parameters...); 

我想富的行爲完全一樣,如果它是java中的一個主要功能。 所以想要在foo運行結束時清理所有內容,也要靜態類字段。哪裏出現問題

例如:

first run foo: 
static fields are set to some values V 
second run foo: 
static fields are still set to values V 

我試圖清除實例Ø但這並沒有解決任何問題(後(相當長),而MATLAB做清理實例,但顯然不是類字段) 。

回答

0

如果您使用的是Swing,您應該能夠通過編程方式關閉主窗口並設置JFrame.DISPOSE_ON_CLOSE來銷燬GUI。但靜態成員的目的是堅持這樣的情況。靜力學的目的是什麼?爲什麼他們不是你的應用程序或主窗口的實例變量?

+0

它們不是實例變量,因爲它們是爲所有實例共享的。我知道我可以給所有實例一個引用成員給同一個實例,但是我認爲這意味着將一個通用的引用傳遞給實例(在構造函數中),因此內存的分配不在該類的上下文中,抽象/調製的目的我需要這個在類上下文中。爲了更好地理解我的應用程序的行爲,以及爲什麼我純理論上應該能夠使用靜態字段,我編輯了我的帖子。 – codelidoo 2011-04-26 14:35:07

+0

那麼,foo完成後可能會退出Matlab。 – 2011-04-26 15:26:11

0

「清除java」命令可能會做你想做的。它將卸載它已加載的所有Java類。

在Java中,它不會退出導致靜態清除的main()方法;當所有非守護線程退出時,JVM都準備關閉。 main()的執行只是其中的一個線程。

你可能會有更好的運氣將它們轉換爲實例變量。或者更確切地說,將所有這些靜態數據包裝在另一個類中,讓所有實例攜帶對該類的單個共享對象的引用。

+0

如果我的理解正確,那麼不可能清除靜態變量而不結束matlab線程呢?在所有情況下,java清除並沒有幫助我:(還因爲我隱藏gui而不是銷燬它,我有一個正在運行的線程(在eclipse中我需要手動退出,並在matlab中,我想它永遠不會結束,只要matlab打開?)這可能會導致靜態調用java清除後仍然設置?在任何情況下有沒有辦法結束這個線程而不會導致matlab退出(調用system.exit) – codelidoo 2011-04-27 11:49:47