2009-11-10 82 views
0

我有兩個程序:一個CLI程序和一個GUI。 GUI是CLI的前端,也是另一個程序的GUI。檢測Java類是否可加載

我正在導入CLI的類並在GUI中擴展它們以將GUI元素添加到類中,並且都很棒。

但現在我想拆分我目前嵌入GUI(作爲包含的JAR)的CLI。 JAR位於一個固定的位置(/opt/program/prog.jar),並且該應用程序僅用於Linux,所以我意識到這打破了傳統的Java思想。

我已經編輯了Manifest文件中的ClassPath來反映這個改變,它工作正常。但是,當我刪除文件時,GUI無法加載,理由是無法加載該類。

有沒有辦法嘗試加載類,如果它不工作,然後做別的事情?本質上,我試圖捕獲ClassNotFound異常,但還沒有運氣。

回答

6

一種常見方法來檢查是否存在類是剛做的Class.forName(「my.Class」) 。你可以用try/catch來包裝它,捕獲ClassNotFoundException並決定要做什麼。如果你願意,你可以在包含main()的包裝類中做到這一點。您可以嘗試加載該類,如果成功,則在加載的類上調用main(),如果不成功,則執行其他操作。

public static void main(String arg[]) { 
    try { 
    Class.forName("my.OtherMain"); 

    // worked, call it 
    OtherMain.main(); 
    } catch(ClassNotFoundException e) { 
    // fallback to some other behavior 
    doOtherThing(); 
    } 
} 
+0

這似乎正是我需要的,但我明天上班時需要嘗試一下。預計明天早上某個時候會被接受。謝謝! – HalfBrian 2009-11-10 02:01:06

1

有沒有辦法嘗試加載類,如果它不工作,然後做別的事情?

假設你已經在C類文件:\叫讓Foo.class

public static void main(String[] args) { 

    File f = new File("c:\\"); 
    if (f.exists()) { 
     URLClassLoader CLoader; 
     try { 
      CLoader = new URLClassLoader(new URL[]{f.toURL()}); 
      Class loadedClass = CLoader.loadClass("Foo"); 
     } catch (ClassNotFoundException ex) { 
     } catch (MalformedURLException ex) { 
     } 

    } else { 
     //do something else... 
    } 

}