0

JButtonにあるメインメソッドを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 内) にある場合は、確実に を使用してメソッドを含むクラスURLClassLoaderロードし、次に使用することができます。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);
}

とはいえ、そのようなメイン メソッドの呼び出しは非常に悪い習慣であることに注意してください。メイン メソッドの内容をイベント ハンドラに同じようにコピーすることもできますCompareActionPerformed。または、メイン メソッドから必要なものと同じことを実行する静的メソッドを使用して、別の独立したクラスを作成することをお勧めします。次に、その新しい静的メソッドをメイン クラスとイベント ハンドラーから呼び出します (すべてのコードが同じクラス ローダーからアクセスできると仮定します)。

于 2014-03-05T15:42:40.083 に答える
0

私はそれが悪い習慣だと思います。MVC などの設計パターンに従う必要があります。JVM が起動すると、「メイン」メソッドが検索され、そこから開始されます。メイン メソッドを呼び出す前にできることは、コードを...のような静的ブレース public class test { static { some code } public static void main(String[] args){ } }

このコードは、メインの前に実行されます

于 2014-03-05T15:41:42.800 に答える
0

クラスは 1 つだけです。それはメインを含むすべてのコードの内部で比較されます....

于 2014-03-05T16:25:05.847 に答える