2013-06-13 6 views
24
public class A{ 
    public static void main(String[] args) 
    { 
     //Main code 
    } 
} 

public class B{ 
    void someMethod() 
    { 
     String[] args={}; 
     A.main(); 
     System.out.println("Back to someMethod()"); 
    } 
} 


これを実行する方法はありますか?私は、リフレクションを使って同じことをする方法を見つけましたが、それはどちらかを呼び出すコードに戻っていません。私は別のプロセスでそれを実行するためにProcessBuilderを使ってみましたが、私は何かが欠けていたと思います。Javaでは、別のクラスのmainメソッドを呼び出して呼び出しコードに戻ることは可能ですか?

+1

試しましたか?もちろん可能ですが、 'main'は単なる別の方法です。 – Blorgbeard

+2

あなたはProcessBuilderについて言及しました。プログラムの2番目のインスタンスを開始しようとしていますか?あるいは、別のプログラムの中から新しいプログラムを開始しようとしていますか? –

+1

私はここで謝罪する必要があります。私のmain()メソッドは、System.exit()を最後に呼び出しているため、呼び出し元のコードに戻りませんでした。私はちょうどそれに気づいた。それは無駄な質問になると思います。 –

答えて

37

あなたのコードはすでにほぼそれをしない - それだけの引数に渡していない:

String[] args = {}; 
A.main(args); 

main方法は、エントリポイントとして扱われ、それの観点からだけで「特別」です。他のコードから問題なく呼び出すことができる、完全に正常なメソッドです。もちろん、は、が(例えば、それがSystem.exitを使用するならば)エントリーポイントとしてだけ呼び出されることを期待しているが、言語の観点からはうまくいきます。

+1

mainを実行した後にsomeMethod()に戻りたい。今はそうではありません。 –

+1

@AswinParthasarathy:他の 'main()'がプログラムを終了した場合に起こります。それをしないでください。 – SLaks

+4

@AswinParthasarathy:あなたのコードが明示的にJVMを強制終了しない限り、それは可能です。しかし、あなたはそのコードを私たちに示していません。 –

6

はい、A.main()に電話することができます。

あなたはこれを行うことができます:あなたは、引数を気にしない場合は、あなたが何かを行うことができます

String[] args = {}; 
A.main(args); 

を:

public static void main(String ... args) 

をし、それを呼び出す:

A.main(); //no args here 
+1

これは問題でした。私はSystem.exit()が最後にあったことに気付かず、混乱して掲示されたのです。 –

1

もちろん。 String [] args = {}; A.main(args);

ちょうどあなたがそこに持っているものから、主な方法はまだプログラムのエントリポイントです。ここで、新しいPROCESSでmainメソッドを実行しようとすると、これは別の話です。

3

"main"という名前には魔法はありません。あなたがスケッチしたものは働くべきなので、あなたの問題は他のものでなければなりません。 "main"の名前を何かに変更することで私の主張をテストしてください。 他にも、私はそれがまだ動作しないと思います。

2

実際には、mainメソッドを呼び出すことができます。まず、すべての実行プロセスがmainメソッドから開始します。だから、あなたが望むようにそれをしたいなら、この方法で正しいことができます。このコードはHello! World 8回実行されます:あなたがしたい場合

class B 
{ 
    B() 
    { 
    while(A.i<8) 
    { 
     String a[]={"Main","Checking"}; 
     A.main(a); 
    } 
    System.exit(0); 
    } 

} 

class A 
{ 
    public static int i=0; 
    public static void main(String args[]) 
    { 
    System.out.println("Hello! World"); 
    i++; 
    B ob=new B(); 
    } 
} 

` 繰り返し部分を、あなたはそれを残すことができます。 私はあなたが望む方法であなたにソリューションを提供したいと考えています。 :)

関連する問題