각 20 개의 Java 프로그램에 각각 main() 함수가 있습니다. 나는 그들 모두를 호출하고 예외를 확인하고 싶다.다른 Java 프로그램을 호출하여 예외 잡기
다른 Java 프로그램에서 Java 프로그램을 호출하는 방법이 있습니까? 또한 예외가 리턴됩니까?
각 20 개의 Java 프로그램에 각각 main() 함수가 있습니다. 나는 그들 모두를 호출하고 예외를 확인하고 싶다.다른 Java 프로그램을 호출하여 예외 잡기
다른 Java 프로그램에서 Java 프로그램을 호출하는 방법이 있습니까? 또한 예외가 리턴됩니까?
public class Main{
public static void main(String args[]){
try{
AnotherClass.main(null); // null inserted for string[] args in the AnotherClass.main
catch(Exception ex){
//do whatever you want
}
}
}
전화
java Main
와 메인 클래스는 메인 AnotherClass를 실행하면 예외를 잡을 수 있습니다.
클래스 목록을 반복하지 않고 내 클래스가 com.xyz.AnotherClass1, com.xyx.anotherxlass2 등의 경우 드라이버 파일에 수동으로 추가 하시겠습니까? – Ajax
http://stackoverflow.com/questions/5926144/loading-a-class-from-out-of-classpath-by-using-java-reflection 은 좋은 시작입니다. 클래스 로더를 사용하여 클래스를로드합니다. 그러면 리플렉션을 사용하여 기본 메소드를 호출 할 수 있습니다. 각 반마다 – Chamil
이것은 20 개의 다른 클래스에 대해서는 응답하지 않습니다. 사용자는 모든 클래스 main 메소드 –
리플렉션을 사용할 수 있습니다. 그냥 파일이나 데이터베이스에있는 모든 클래스 이름을 가지고 있고 당신은 확실히 (교체 아웃 반사 또는과) 부모 클래스의 모든 정적 main
의를 호출 할 수 있지만 다음 단계
List<String> listOfJavaFiles = new ArrayList<String>();
//
listofJavaFiles.add("package.className");
---
//
for(String fileName = listOfJavaFiles){
Class<?> cl = Class.forName(fileName);
Method mh = null;
try {
mh = cl.getMethod("main",String[].class);
} catch (NoSuchMethodException nsme) {
} catch (SecurityException se) {
}
if(mh!=null){
try {
mh.invoke(null,(Object)new String[0]);
} catch (IllegalAccessException e) {
} catch (IllegalArgumentException e) {
} catch (InvocationTargetException e) {
}catch(Exception e){
//your logic should go here
////The exception will get thrown here for your main program provided your main program does not throw IllegalAccessException ,IllegalArgumentException and InvocationTargetException
}
}
}
@AdamGent True를 명시 적으로 호출해야하지만 20 개의 클래스에 대해 20 개의 metthod 호출을 작성해야합니다. 하나의 메소드로 반복 및 호출 할 수 있습니다 이 모든 수업의 주된 방법은 –
입니다. OP가 무엇을 요구했는지 또는 그의 의도가 무엇인지 나는 완전히 확신하지 못했습니다. 그래서 당신은 나의 이전 코멘트를 무시할 수 있습니다. –
을 사용하여 내가보기 엔 당신을 추천합니다 코드를 리팩터링하고 모든 클래스가 인터페이스를 구현하도록하십시오.
public interface CustomMain {
public void doMain(String args[]);
}
public class OneOfTheMainClasses implements CustomMain {
public static void main(String args[]) {
new OneOfTheMainClasses().doMain(args); // for backward compat.
}
public void doMain(String args[]) { //work here }
}
그런 다음 코드에서 당신은
main
을 가지고 있으며,
CustomMain
를 구현하는 각 클래스를 만들 것하고는
List<CustomMain>
에 넣어. 당신이 리팩토링해야하는 이유
List<CustomMain> mains = ...; //(Either use reflection or manually add the instances)
for (CustomMain m : mains) {
try {
m.doMain(args);
} catch (Exception e) {
// do what you want here.
}
}
하나의 큰 이유는합니다 ... static main
는 점에서 암시 적 계약이 진입 점과 종료 시점입니다 있습니다. 그것은 static main
입니다 System.exit(0)
또는 다양한 다른 종료 절차를 호출 할 수 있습니다
프로그램 어디서나 System.exit (0)을 호출할까요? –
아마도 뭔가 ClassLoader를 사용하여 해킹. 내가 생각할 수있는 유일한 대안은'Runtime.getRuntime(). exec (...)'이지만 출력 파싱 이외의 예외를 잡을 수는 없다. – Rogue
다른 클래스에서'main'을 호출 할 수 있습니다. 그것은 단지 방법 일뿐입니다. 'java MyDriverClass'를 수행하고 MyDriverClass가 다른 클래스의'main' 메소드를 호출하도록합니다 (그리고 원하는대로 예외를 잡습니다). –
좋아, 해보겠습니다. – Ajax