0

我想知道,如何将 JButton 中的 main 方法调用到 JFrame 中并执行操作,我的意思是,只需按下比较按钮并执行主类中的代码(主类与 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) {


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

}
4

5 回答 5

3

如果主类在类路径上,您可以使用反射:

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

如果该类位于其他地方,可能在一个 jar 中,您当然可以使用 anURLClassLoader加载包含该main方法的类,然后使用

myMainClass.getMethod("main", String[].class).invoke(null, myArgs);
于 2014-03-05T15:40:23.800 回答
1

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

MainClass.main(args);
于 2014-03-05T15:37:54.553 回答
1

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

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

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

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

于 2014-03-05T15:42:40.083 回答
0

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

于 2014-03-05T16:25:05.847 回答
0

我认为这是一个不好的做法,你应该遵循一些设计模式,比如 MVC 之类的,当 JVM 启动时它会寻找“main”方法并从那里开始,在调用 main 方法之前你可以做的事情是将一些代码放入静态大括号... public class test { static { some code } public static void main(String[] args){ } }

此代码将在 main 之前执行

于 2014-03-05T15:41:42.800 回答