2009-11-10 6 views
0

У меня есть две программы: одна программа CLI и один графический интерфейс. GUI является интерфейсом для CLI, но также графическим интерфейсом для другой программы.Определить, загружен ли класс Java

Я импортирую классы CLI и расширяю их в GUI, чтобы добавлять элементы GUI в классы, и все отлично.

Но теперь я хочу разбить CLI, который я сейчас встроил в графический интерфейс (в качестве включенного JAR). JAR находится в фиксированном месте (/opt/program/prog.jar), и приложение будет использоваться только в Linux, поэтому я понимаю, что это нарушает традиционную Java-мысль.

Я отредактировал 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

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... 
    } 

} 
Смежные вопросы