У меня есть JFrame с JPanel в нем. Я загружаю ненадежный сторонний код, который должен добавить некоторые компоненты в мой JPanel. Как я могу изолировать свой JPanel таким образом, чтобы сделать невозможным доступ сторонних компонентов к ресурсам за пределами JPanel (например, JFrame)?Песочница JPanel внутри JFrame
ответ
Это будет сложно, так как ваш JPanel расширяет JComponent, у которого есть getParent(), который вернет ваш JFrame ... Поскольку каждый компонент Swing реализует это, вполне вероятно, что ваш сторонний компонент также реализует это. Вы можете попробовать переписать эти методы, но я не думаю, что качели все равно будут работать правильно, потому что вы будете вырезать ComponentTree, делая это ...
Не могли бы вы объяснить, как вы загружаете этот ненадежный код? Это библиотека или вы загружаете ее во время выполнения путем отражения или чего-то подобного?
Извините, что забыл упомянуть об этом. Я загружаю код во время выполнения с помощью URLClassLoader. В основном я динамически загружаю класс, создаю новый экземпляр, а затем вызываю некоторые методы на этом экземпляре, которые возвращают компоненты SWING, такие как JPanel или JButton. Должен ли я создать новый JFrame вместо добавления их в JPanel? – Flavio
Mmmh JFrame будет корнем ComponentTree .. это звучит хорошо для меня. Но это изменит использование и дизайн gui ... Возможно, более важно ограничить доступ к файловой системе и сети. Даже если вы найдете способ ограничить доступ к Swing-Classes, это не будет заставлять внешний код доступа к другим данным на вашей локальной машине и отправлять их на какой-либо сервер в Интернете. – treeno
На самом деле у меня есть собственный SecurityManager. Загрузка внешних компонентов «безопасно» в моем окне - единственная проблема, которую я не могу решить, потому что, например, они могут вызывать .getParent() и модифицировать это. Создание нового JFrame может работать, но это действительно испортит весь пользовательский интерфейс. Я все еще пытаюсь понять, могу ли я сделать что-то полезное с помощью JPanel – Flavio
- 1. JPanel внутри JScrollPane внутри JPanel внутри JFrame
- 2. JPanel Containts внутри JFrame
- 3. Layouting JPanel внутри JFrame
- 4. нажатие JPanel внутри JFrame
- 5. JPanel внутри jframe
- 6. Позвоните JPanel внутри JFrame
- 7. Как «упаковать» JPanel внутри JFrame?
- 8. JPanel внутри JFrame с краской
- 9. Принудительный JFrame в JPanel
- 10. Как правильно выровнять два JPanel внутри JFrame
- 11. Как сменить JPanel внутри JFrame на лету?
- 12. Как добавить изображение в jpanel внутри Jframe?
- 13. Как установить размер для JPanel внутри JFrame?
- 14. Как расположить кнопки на JFrame внутри JPanel
- 15. Показать JFrame внутри JPanel в java
- 16. Отображение JComponent внутри JPanel на JFrame
- 17. Как управлять размерами JPanel внутри JFrame
- 18. Java Swing - Создание прокручиваемой JPanel внутри JFrame
- 19. Как организовать мой JPanel внутри JFrame?
- 20. Как отображать JasperReports Viewer внутри JPanel/JFrame ..?
- 21. Обновление JPanel в JFrame
- 22. Переместить JPanel в JFrame
- 23. JFrame, JPanel, paintComponent как
- 24. Удаление JPanel внутри JPanel ... внутри JPanel
- 25. Удаление JPanel из JFrame
- 26. JPanel Меньше, чем JFrame
- 27. JPanel заполнить весь JFrame
- 28. Добавление JPanel в JFrame
- 29. Закрытие JFrame из JPanel
- 30. repaint() JFrame и JPanel
Вы можете попробовать загрузить сторонний код в загрузчике класса, основанного на безопасности. Не сделал это сам, но вы могли бы посмотреть на [это] (http://stackoverflow.com/questions/1791060/java-security-classloader) – MadProgrammer
Вы заглянули в [Security Manager] (http://docs.oracle .com/javase/7/docs/api/java/lang/SecurityManager.html)? – Marc
Разве менеджер безопасности не обрабатывает такие файлы, как доступ к файлам и т. Д.? Я не знал, что он может ограничить доступ к объектам, как хочет Флавио. – treeno