我有下面的代碼,我做了一個簡單的GUI。我想讓Button2導航到'Project2'類,它應該啓動另一段代碼。只需要注意,在目前的狀態下,'Project2'沒有GUI,但我打算很快添加一個。無論如何,通過添加:String[] args = {}; Project2.main(args);
這個'代碼跳轉'不起作用,因爲IDE說'IOException必須被捕獲或拋出'。我知道這是如何工作的,但我不知道如何在程序中實現它。跳轉到另一個課程使用JButton
在此先感謝!
我有下面的代碼,我做了一個簡單的GUI。我想讓Button2導航到'Project2'類,它應該啓動另一段代碼。只需要注意,在目前的狀態下,'Project2'沒有GUI,但我打算很快添加一個。無論如何,通過添加:String[] args = {}; Project2.main(args);
這個'代碼跳轉'不起作用,因爲IDE說'IOException必須被捕獲或拋出'。我知道這是如何工作的,但我不知道如何在程序中實現它。跳轉到另一個課程使用JButton
在此先感謝!
在大多數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
您可以嘗試使用動態類加載的程序。在下面你可以找到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瞭解更多詳情。
希望這會有所幫助。祝你好運。
爲什麼你會這樣做呢?編輯:如果你的程序有另一個「部分」或多或少是獨立的,只需做'Something s = new Something(maybeArgsHere); s.show(); '或's.main()',除非你真的需要靜態地獲得這個程序的一個實例,我猜。另外,爲了捕捉錯誤,用'try {} catch()'塊來包圍你的調用。 – Wep0n
您應該*從不*在事件處理程序中執行長操作。這聽起來像是來自另一個程序的「主」,這是一個長期的操作。它應該在一個工作者線程中完成,並且我會說使用另一個類的'main'是一個大的代碼味道,說你在錯誤的方向。 – RealSkeptic
@RealSkeptic +1 - 聽起來很像。我會建議增加一個答案來解釋線程的性能優點。雖然看到這個用戶有1個代表,但我認爲他們不僅是新手,而且還是他們所問的編程語言的新手,所以可能會遇到這樣的情況:使用java線程對於那裏的初學者來說可能有點兒意義。我認爲可能是這樣,是因爲Project2.main()並不是那麼長的一個操作,因爲這個項目可能不是那麼大。我認爲你的回答會爲一些「良好實踐」做出貢獻。 – Wep0n