在JButton中调用main方法

时间:2014-03-05 15:35:26

标签: java swing netbeans-7 mainclass

我想知道,如何将JButton中的main方法调用到执行动作的JFrame中,我的意思是,只需按下比较按钮&从主类执行代码(Main类与JFrame代码分开)。

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) {


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

}

5 个答案:

答案 0 :(得分:3)

如果主类位于类路径上,则可以使用反射:

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

如果类位于其他位置(可能在jar中),您当然可以使用URLClassLoader 加载包含main方法的类,然后使用

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

答案 1 :(得分:1)

您可以获取所需的参数,然后使用类的名称来调用它:

MainClass.main(args);

答案 2 :(得分:1)

要给出完整的答案,我们实际上需要知道包含该main方法的类的名称是什么。此外,我很难理解这样一个奇怪的要求,但我会尽力提出一个有用的答案。

要调用main方法,您需要通过包含它的类来访问它,因为它是static方法。您还需要提供一个参数数组,主要是因为您的main方法似乎使用arguments数组中的第一个元素。所以这样的事情会起作用:

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

现在,请注意,这样一个main方法的调用是一个非常糟糕的做法,你可以实现将main方法的内容复制到事件处理程序CompareActionPerformed中。或者甚至更好,使用静态方法创建一个单独的独立类,该方法执行与main方法相同的操作。然后从主类和事件处理程序中调用新的静态方法(假设所有代码都可以从同一个类加载器访问)。

答案 3 :(得分:0)

我认为这是一个不好的做法,你应该遵循一些设计模式,比如MVC或其他东西,当JVM启动时它会查找“main”方法并从那里开始,你可以在调用main方法之前做的事情就是放一些像... public class test { static { some code } public static void main(String[] args){ } }

这样的静态大括号中的代码

此代码将在主

之前执行

答案 4 :(得分:0)

只有一个类,它里面的比较是包括主要的所有代码....