Безопасность с загрузкой библиотеки JApplet

Я создал JApplet, который использует библиотеку JFreeChart (и JCommon). Мое приложение похоже на клиент-сервер. Я делаю запрос на диаграмму, которую создает сервер, и возвращаю JPanel, содержащую диаграмму. Этот конкретный JPanel является экземпляром класса (ChartPanel), который является подклассом JPanel. Теперь проблема в следующем: когда я читаю JPanel с сервера, у меня есть эта трассировка стека http://pastebin.com/WnLcp9kQ (Вы можете увидеть мои классы в строке 36) Что это значит? связано с тем, что я использую две банки (JFreeChart и JCommon) в качестве внешних библиотек? Здесь вы можете увидеть структуру моего проекта, из которой я создал банку http://i45.tinypic.com/zw136p.png

Спасибо.


person LS05    schedule 09.07.2012    source источник


Ответы (1)


Я даже не могу придумать, с чего начать.

Во-первых, не передавайте компоненты Swing по сети. Это просто грязно и вызовет бесконечные проблемы.

Проблема, с которой вы столкнулись, связана с ожиданиями компонента, созданного в другом контексте. В этом случае компонент нарушает ограничения менеджера безопасности апплета.

Было бы (немного) лучше передать объект JFreeChart обратно, а затем применить его к панели самостоятельно, предполагая, что JFreeChart не пытается связать нативную библиотеку.

Лучшим решением было бы передать данные серии обратно клиенту и построить всю корзину на стороне клиента.

person MadProgrammer    schedule 10.07.2012
comment
Спасибо за ваш ответ ... вы поняли, что я делаю! ;) Я создаю диаграмму на сервере, а затем передаю JPanel, содержащую диаграмму, клиенту. Думаю, я воспользуюсь вашим последним решением. РЕДАКТИРОВАТЬ: У меня много проблем с JApplet. Если я отлаживаю, он работает правильно (но с проблемой диаграммы), если я не отлаживаю его, то он, кажется, зависает. Что вы думаете о подписанной банке? Как говорит Эндрю Томпсон выше? - person LS05; 10.07.2012
comment
Спасибо за совет! Оно работает! Я передал данные с сервера клиенту, и это работает! Но это работает странно, потому что если я отлаживаю сервер и запускаю japplet клиента, все в порядке. если я запускаю japplet сервера, а затем запускаю japplet клиента, я получаю следующее: java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver Это первый случай не -детерминистическое программное обеспечение может быть! :D - person LS05; 10.07.2012
comment
Связан ли файл jar драйвера с клиентским апплетом? Что касается подписанных банок, это неплохая идея, но это зависит от того, что в первую очередь вызывает нарушение безопасности и насколько строга политика безопасности клиентов. - person MadProgrammer; 10.07.2012
comment
Кроме того, убедитесь, что 1. Клиентский апплет содержит свойство пути к классу в своем манифесте и может быть загружен с сервера. - person MadProgrammer; 10.07.2012
comment
Но как вы объясните тот факт, что если я отлаживаю код, все работает, и если я запускаю его, я получаю это исключение? - person LS05; 10.07.2012
comment
Я нашел проблему. pastebin.com/mSCNjaKr Я получаю это, когда клиентский апплет достигает этого: result = (String)in .readObject(); Не знаю почему, но я получаю это исключение, только если сервер запускается в браузере, а не с программой просмотра апплетов, очень странно! Может из-за политики безопасности апплета? - person LS05; 10.07.2012
comment
Но я думаю, что это связано с исключением драйвера на стороне сервера! - person LS05; 10.07.2012
comment
Я решил. Я подписал серверные апплеты и включил файлы jar, используемые апплетом, в папку archive. Теперь у меня есть эта проблема (бесконечная история): после того, как я принимаю сертификат апплета в браузере, появляется новое диалоговое окно, но оно совершенно пустое, вот так: i45.tinypic.com/3465bmc.jpg Теперь я не знаю, что делать! - person LS05; 10.07.2012
comment
Вам нужно проверить консоль Java, чтобы увидеть, что она выводит. Кроме того, я сейчас очень запутался, сервер не должен работать на стороне клиента, или я просто неправильно читаю - person MadProgrammer; 11.07.2012
comment
Вы правы, но я запускаю их на одной машине. просто для демонстрации. - person LS05; 11.07.2012
comment
Похоже, клиентская программа пытается загрузить драйвер jdbc, что, насколько я могу судить, вам не нужно/не хочется делать - person MadProgrammer; 11.07.2012
comment
Я решил использовать графический интерфейс для сервера, а не концептуально лучший апплет (связанный со значением сервера). спасибо за ваши советы! ;) - person LS05; 25.07.2012