2014-03-05 69 views
0

我想知道,如何調用主方法,因爲它是在一個JButton中調用一個JFrame執行一個動作,我的意思是,只需按下比較按鈕&從主類執行代碼(主類與JFrame代碼分開)。在JButton調用main方法

public static void main(String[]args){ 

    Comparative comp = new Comparative(); 


    if(comp.loadComparative(args[0])){ 
     comp.compareDbs(); 
     comp.sendEmail(); 
    }   

} 

private void CompareActionPerformed(java.awt.event.ActionEvent evt) { 


     ????????????? 

} 
+1

你想調用一個單獨的應用程序(獨立的JAR,並在不同的類加載器),或者只是想執行**與主要方法**中包含的代碼相同的操作**? –

+0

與主要方法中包含的代碼相同的操作 – man

回答

0

你可以得到你所需要的參數,然後使用它是類的名字稱呼它:

MainClass.main(args); 
1

如果主類是你可以使用反射類路徑:

private void CompareActionPerformed(java.awt.event.ActionEvent evt) { 
    MyMainClassToCall.main(myArgs); 
} 

如果該類位於其他地方,可能在一個罐子裏,你當然可以使用URLClassLoader負載其中包含類方法,然後用

myMainClass.getMethod("main", String[].class).invoke(null, myArgs); 
+0

我不需要給出參數,它必須從文件屬性中取出它,運行。 – man

+0

您可以使用'new String [0]'替代'myArgs'。從文件屬性中取得什麼意思?你想從文件屬性加載'myArgs',然後調用'main'或者你想用空args調用'main',然後從文件加載屬性? –

+0

糾正代碼中沒有參數,然後從xml文件中調用它們,例如。右鍵單擊項目,屬性,然後運行,然後args&那裏我打電話從即時加載文件前參數。 「C:\對比\文件。xml「 netbeans – man

0

我認爲這是一個不好的做法,你應該遵循的一些設計模式,如MVC或東西,當JVM啓動時,它看起來對「主」的方法,並從那裏開始,這件事你可以調用的主要方法是把一些代碼在這樣一個靜態括號之前做... public class test { static { some code } public static void main(String[] args){ } }

此代碼將主要

1

之前執行爲了讓我們真正需要知道什麼名字了一個完整的答案類包含main方法。此外,我正在努力理解這樣一個奇怪的要求,但我會盡我所能提出一個有用的答案。

要調用main方法,需要通過包含它的類來訪問它,因爲它是一個static方法。您還需要提供一個參數數組,主要是因爲您的主要方法似乎使用了參數數組中的第一個元素。因此,像這樣的工作:

private void CompareActionPerformed(java.awt.event.ActionEvent evt) { 
    String[] args = new String[] { "myparam" }; 
    MainClass.main(args); 
} 

現在,他說,讓我注意,主要方法這樣的調用是一個非常不好的做法,可以達到同樣的複製你的主要方法的內容到您的事件處理程序CompareActionPerformed。或者甚至更好,使用靜態方法創建一個獨立的獨立類,該方法執行主方法所需的相同操作。然後從你的主類和你的事件處理程序中調用這個新的靜態方法(假設所有的代碼都可以從同一個類加載器訪問)。

+0

我知道這是真的很奇怪,我知道這是一個不好的習慣,但這個應用程序是這樣的,我沒有創建它,我沒有足夠的時間來修復它:( – man

+0

@man然後就像我在我的例子中說的那樣調用它,使用正確的類名,當然是 –

+0

我怎樣才能調用沒有參數的主要方法,因爲args是從文件屬性\運行加載? 如果我設置相同的代碼作爲你寫它,並將參數留空它不起作用,因爲它需要一個參數(arg) – man

0

只有一個類,它是比較裏面它的所有incluing代碼主要....

+0

您應該將該信息添加到您的原始問題(單擊編輯並修改問題),而不是爲自己的問題添加答案。 –