2017-08-07 41 views
-2

我有下面的代碼,我做了一個簡單的GUI。我想讓Button2導航到'Project2'類,它應該啓動另一段代碼。只需要注意,在目前的狀態下,'Project2'沒有GUI,但我打算很快添加一個。無論如何,通過添加:String[] args = {}; Project2.main(args); 這個'代碼跳轉'不起作用,因爲IDE說'IOException必須被捕獲或拋出'。我知道這是如何工作的,但我不知道如何在程序中實現它。跳轉到另一個課程使用JButton

在此先感謝!

+0

爲什麼你會這樣做呢?編輯:如果你的程序有另一個「部分」或多或少是獨立的,只需做'Something s = new Something(maybeArgsHere); s.show(); '或's.main()',除非你真的需要靜態地獲得這個程序的一個實例,我猜。另外,爲了捕捉錯誤,用'try {} catch()'塊來包圍你的調用。 – Wep0n

+0

您應該*從不*在事件處理程序中執行長操作。這聽起來像是來自另一個程序的「主」,這是一個長期的操作。它應該在一個工作者線程中完成,並且我會說使用另一個類的'main'是一個大的代碼味道,說你在錯誤的方向。 – RealSkeptic

+0

@RealSkeptic +1 - 聽起來很像。我會建議增加一個答案來解釋線程的性能優點。雖然看到這個用戶有1個代表,但我認爲他們不僅是新手,而且還是他們所問的編程語言的新手,所以可能會遇到這樣的情況:使用java線程對於那裏的初學者來說可能有點兒意義。我認爲可能是這樣,是因爲Project2.main()並不是那麼長的一個操作,因爲這個項目可能不是那麼大。我認爲你的回答會爲一些「良好實踐」做出貢獻。 – Wep0n

回答

0

在大多數IDE的,當你在設計(GUI)窗格中的Button2的右鍵單擊,您可以穿越:

活動 - >操作 - >的actionPerformed()。

譜寫選擇的方法這個代碼切換類:

this.setVisible(false); //turns off the visibility of the current class 
outputClass out = new outputClass(); //creating the object of the class you want to redirect to 
out.setVisible(true);//turns on the visibility of the class you want to redirect to 
1

您可以嘗試使用動態類加載的程序。在下面你可以找到lambda,它調用com.stackoverflow.ExternalCaller類的main方法。

如果你不喜歡使用lambda,你可以創建一個簡單的匿名類。

button.addActionListener(s -> { 
    try { 
     Class<?> externalCaller = Class.forName("com.stackoverflow.ExternalCaller"); 
     Method main = externalCaller.getDeclaredMethod("main", new Class[]{String[].class}); 
     main.invoke(null, new Object[]{new String[0]}); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
}); 

ExternalCaller類反過來看起來就像這樣:

package com.stackoverflow; 

public class ExternalCaller { 
    public static void main(String args[]) { 
     System.out.println("Hello World"); 
    } 
} 

在結果一旦你點擊按鈕,你會得到控制檯Hello World輸出。 如果您想使用外部罐子等,請參閱Process課程。快速示例:

Process proc = Runtime.getRuntime().exec("java -jar External.jar"); 

或甚至更多在fork/exec。你可以閱讀From Runtime.exec() to ProcessBuilder瞭解更多詳情。

希望這會有所幫助。祝你好運。

相關問題