|
|
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
Могут ли классы из rt.jar вызывать методы классов приложения? У меня получалось NoDefClassFoundError. Может я чего не учел? Или это так задумано в целях безопасности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 13:57:10 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
Не может. Зато ты можешь сделать свой rt.jar и пропихнуть туда свои классы, но это стремно, см. предыдущий пост. И еще, какая задача то? А то бывает хотят тупо String переопределить и выдумывают всякую непотребщину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 13:59:29 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
drewhaМогут ли классы из rt.jar вызывать методы классов приложения? "Вызывать" они могут. Проблема может быть именно с загрузкой. Почитайте про иерархию Classloader-ов. drewhaУ меня получалось NoDefClassFoundError. Может я чего не учел? Или это так задумано в целях безопасности? NoClassDefFoundError - что-то не так собрали, что-то не так запустили, что-то не то с класслоадерами и пр. Покажите стэктрейс и объясните что где находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 14:00:12 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
BlazkowiczNoClassDefFoundError - что-то не так собрали, что-то не так запустили, что-то не то с класслоадерами и пр. Покажите стэктрейс и объясните что где находится. Проект я уже удалил, но могу сделать заново ради интереса. Но откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами? Поэтому и получается NoDef.. ошибка как мне кажется. Или я чего-то недопонимаю? Сейчас заново пересоберу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 14:28:38 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
drewhaПроект я уже удалил, но могу сделать заново ради интереса. На словах объяснить никак? drewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами? Через интерфейсы. Например JDBC имеет стандарные интерфейсы. JRE через них может обращатся к любой реализации JDBC драйвера. drewhaПоэтому и получается NoDef.. ошибка как мне кажется. Эта ошибка поиска и загрузки класса. А не вызова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 14:40:06 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
drewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами? Сами об этом сообщите. Например, вы сделали приложение с классами Main и Child, вызываемый из Main. Класс Сhild удалили (ну или неправильно настроили classpath). Запускаете "java Main" и вот, NoClassdefFoundError: Child. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 15:37:21 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
rfqdrewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами? Сами об этом сообщите. Например, вы сделали приложение с классами Main и Child, вызываемый из Main. Класс Сhild удалили (ну или неправильно настроили classpath). Запускаете "java Main" и вот, NoClassdefFoundError: Child. тут немного не о том - и класс Main и Child в вашем примере - оба пользовательские ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 15:51:43 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
Я, наверное, немного не то имел в виду. Например, мы добавили или изменили класс. Пусть будет изменили на примере JLabel, метод setText у нее стал начинаться: Код: java 1. 2. 3. 4. 5. 6. Написали класс LabelTest: Код: java 1. 2. 3. 4. 5. 6. Если потом их оба положить в rt.jar, то получается StackOverflow (это я с isSetted не до конца разобрался), т.е. как-бы работает. А если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается. Никаких JDBC, RMI нет, все самое простейшее. Тем более для JDBC драйвер нежен, с RMI я вообще не работал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 15:58:46 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
drewhaА если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается. Как я уже писал выше. Проблема именно в загрузке классов, а не вызове. ClassLoader, который загрузил JLabel, ничего не знает про ваше приложение. Зачем вы вообще так делаете? Наследование уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 16:03:23 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
BlazkowiczdrewhaА если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается. Как я уже писал выше. Проблема именно в загрузке классов, а не вызове. ClassLoader, который загрузил JLabel, ничего не знает про ваше приложение. Зачем вы вообще так делаете? Наследование уже отменили? Именно так оно и есть, Родительский загрузчик не имеет доступа к классам, загруженным дочерним загрузчиком. Ну все примерно как я предполагал - легких путей не ищем. Чего уж JVM заодно не переписать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 16:27:55 |
|
||
|
rt.jar и внешний мир
|
|||
|---|---|---|---|
|
#18+
забыл никИменно так оно и есть, Родительский загрузчик не имеет доступа к классам, загруженным дочерним загрузчиком. Если класс уже загружен, то родительскому загрузчику вообще пофиг. Класс может быть использован любым другим классом в JVM. Проблема именно в самой загрузке. Можно явно загрузить класс до использования JLabel и ошибки не будет. забыл никЧего уж JVM заодно не переписать. С появлением OpenJDK это заявление не звучит таким уж ироничным. С другой стороны drewha не хочет объяснить зачем это всё понадобилось. Решений, ведь, может быть, масса. Задача только не ясна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2012, 16:38:41 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37785176&tid=2131846]: |
0ms |
get settings: |
13ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 379ms |
| total: | 548ms |

| 0 / 0 |
