Нужно написать гуишное приложение с возможностью подключать модули (то есть плагины). Причём программа не должна перезапускаться при их подключение (должно всё применяться сразу же).
Java по счастливому стечению обстоятельств умеет подгружать классы динамически:
// Где-то там, где реализуется плагин
class MyClass implements MyPluginInterface {}
// У нас тут, в модульной софтинке
try {
Class c = Class.forName("com.vasyapupkin.MyClass");
} catch (ClassNotFoundException e) {
// log error
}
Затем, посредством рефлекшна, вы можете создавать экземпляры вашего типа:
MyPluginInterface plugin = (MyPluginInterface) с.newInstance();
При подключении плагина будет изменяться главная форма программы, то есть будут появляться какие-то кнопки, поля и прочее.
Ваша софтинка должна как-то отслеживать появление файлов. В простейшем случае -
ждать появление файлов где-то по classpath, чтобы попытаться выудить новые классы. В простейшем случае классы могут быть наследниками GUI-компонентов (т.е. уметь себя рисовать) и вы можете просто вставлять их экземпляры в заранее известный контейнер.
ЗЫ Можно делать свой велосипед, но такая технология в Java уже существует из коробки -
JavaBeans и, если вы хотите препода довести до экстаза, то стоит копать в этом направлении.