2015-05-18 55 views
-1

我創建了一個名爲App的類來擴展Application(JavaFX)。其中,我有2個階段顯示幾個按鈕。 這個App類在main中實例化,然後作爲參數傳遞給另一個名爲Controller的類/線程(一個has-a關係)。一旦控制器接收到一個事件,它會調用app.hideGUI();的功能的內容是:從另一個類調用.hide()不起作用

public void hideGUI() 
{ 
    handstage.hide(); 
    stage.hide(); 
} 

此外,在App類我有以下幾點:

public static void main(String[] args) { 
    App app = new App(); 

    // 
    launch(args); 
} 
public App() 
{ 
    StartLeap(); 

} 

public void StartLeap() 
{ 
    LeapApp.init(true); 
    LeapApp.setMode(Mode.INTERACTION_BOX); 
} 

但是,這是行不通的。它要麼崩潰,要麼根本不隱藏舞臺。請告訴我爲什麼以及如何解決這個問題。

謝謝

+0

當你說「它崩潰」時,你是什麼意思?它是否會拋出異常?你提到了兩種不同的意想不到的行爲,但是是什麼原因導致了其中一種? – Tavo

+0

「這個應用程序類在'main'中實例化」聽起來像這個問題。你能基本證明你是如何做到這一點的? JavaFX應用程序的入口點是'start(...)'方法,當您調用Application.launch()時(或者在Java 8中由JVM調用)時,將在新的Application子類實例上調用*啓動過程)。所以你創建的實例可能不是調用'start(...)'的實例。編輯您的問題以顯示您的應用程序是如何啓動的(並且還包括任何例外的堆棧跟蹤)。 –

+0

這裏是我的代碼的另一個片段(請參閱編輯的問題)] –

回答

0

發現問題。顯然,當從另一個對象調用App時,就像擁有一個不同於由JavaFX創建的Application線程的線程在JavaFX上運行某些東西。它不起作用。所以,如果我在Platform.callLater(..)中放置hide()調用,它將從JavaFX代碼調用它,它將工作:D(Yey!)。

有了這個,我要感謝James_D誰試圖幫助。我的畢業設計是,,,,完成!

1

從你給的信息有限,它看起來好像你是對的App錯誤的實例調用hideGUI()

main(...)方法創建的App兩個實例:一個直接與

App app = new App(); 

和一個間接

launch(args); 

launch(...)方法創建的App一個新實例,該實例調用start(...)。如果您使用您在第一行中創建的實例調用app.hideGUI(),它將不會引用您在start(...)方法中使用的同一實例。

+0

我沒有。我刪除了App的實例化。但是,問題仍然存在。 hide()仍然不起作用。至少是否有另一種方法來使其發揮作用? –

+0

除非您提供足夠的信息,否則確實無法分辨。 –

+0

發現問題。閱讀另一個答案。謝謝你嘗試壽,真的,謝謝你。 –