Метод вызывается из потока обработки событий. Я уверен, что это часть проблемы. Вы пытаетесь получить доступ к файлу JAR, содержащему класс com.mysql.jdbc.Driver
из этого потока. Это где ошибка выбрасывается. Я должен задаться вопросом, есть ли здесь какая-то проблема параллелизма? Вот несколько общих замечаний, которые следует учитывать. После того, как вы решите эти проблемы, посмотрите, не возникла ли у вас проблема.
Вы не должны выполнять запрос к базе данных изнутри EDT. Вы должны собрать необходимую информацию из компонентов Swing, а затем использовать объект Runnable
для выполнения запроса SQL в другом потоке. Выполните поиск в SO для выполнения кода в EDT или вне его, чтобы найти примеры того, как это сделать. Это гарантирует, что ваш пользовательский интерфейс не заблокируется, пока вы ждете результатов SQL.
Открытие и закрытие соединения с базой данных каждый раз, когда вам нужно, лучше оставить драйверу SQL и его встроенным возможностям пула соединений. Этот метод должен быть объявлен на каком-то объекте контроллера, который уже имеет ссылку на соединение SQL. Затем, когда вызывается этот метод, вы вызываете ваш поток, как на последнем шаге, и этот поток использует ссылку на соединение SQL, которое у него уже есть.
Это возьмет строку, которая выдает исключение, и переместит его из EDT в какую-то фазу установки, предположительно, где вам больше повезет с доступом к файлу класса. Конечно, это будет намного более контролируемая среда, чем в EDT. Если проблема с доступом к нему не устранена, отладку будет проще выполнить в более контролируемой среде.
В качестве дополнительного бонуса вы также будете разрабатывать свое приложение более надежным способом.