Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / rt.jar и внешний мир / 11 сообщений из 11, страница 1 из 1
07.05.2012, 13:57:10
    #37785174
drewha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
Могут ли классы из rt.jar вызывать методы классов приложения? У меня получалось NoDefClassFoundError. Может я чего не учел? Или это так задумано в целях безопасности?
...
Рейтинг: 0 / 0
07.05.2012, 13:59:29
    #37785175
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
Не может. Зато ты можешь сделать свой rt.jar и пропихнуть туда свои классы, но это стремно, см. предыдущий пост.
И еще, какая задача то? А то бывает хотят тупо String переопределить и выдумывают всякую непотребщину
...
Рейтинг: 0 / 0
07.05.2012, 14:00:12
    #37785176
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
drewhaМогут ли классы из rt.jar вызывать методы классов приложения?
"Вызывать" они могут. Проблема может быть именно с загрузкой. Почитайте про иерархию Classloader-ов.

drewhaУ меня получалось NoDefClassFoundError. Может я чего не учел? Или это так задумано в целях безопасности?
NoClassDefFoundError - что-то не так собрали, что-то не так запустили, что-то не то с класслоадерами и пр. Покажите стэктрейс и объясните что где находится.
...
Рейтинг: 0 / 0
07.05.2012, 14:28:38
    #37785205
drewha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
BlazkowiczNoClassDefFoundError - что-то не так собрали, что-то не так запустили, что-то не то с класслоадерами и пр. Покажите стэктрейс и объясните что где находится.

Проект я уже удалил, но могу сделать заново ради интереса.
Но откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами?
Поэтому и получается NoDef.. ошибка как мне кажется.
Или я чего-то недопонимаю?
Сейчас заново пересоберу.
...
Рейтинг: 0 / 0
07.05.2012, 14:40:06
    #37785215
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
drewhaПроект я уже удалил, но могу сделать заново ради интереса.

На словах объяснить никак?

drewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами?

Через интерфейсы. Например JDBC имеет стандарные интерфейсы. JRE через них может обращатся к любой реализации JDBC драйвера.

drewhaПоэтому и получается NoDef.. ошибка как мне кажется.

Эта ошибка поиска и загрузки класса. А не вызова.
...
Рейтинг: 0 / 0
07.05.2012, 15:37:21
    #37785272
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
drewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами?
Сами об этом сообщите.
Например, вы сделали приложение с классами Main и Child, вызываемый из Main. Класс Сhild удалили (ну или неправильно настроили classpath). Запускаете "java Main" и вот, NoClassdefFoundError: Child.
...
Рейтинг: 0 / 0
07.05.2012, 15:51:43
    #37785292
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
rfqdrewhaНо откуда классы из rt.jar могут знать что где-то есть наше приложение с нужными классами?
Сами об этом сообщите.
Например, вы сделали приложение с классами Main и Child, вызываемый из Main. Класс Сhild удалили (ну или неправильно настроили classpath). Запускаете "java Main" и вот, NoClassdefFoundError: Child.

тут немного не о том - и класс Main и Child в вашем примере - оба пользовательские
...
Рейтинг: 0 / 0
07.05.2012, 15:58:46
    #37785298
drewha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
Я, наверное, немного не то имел в виду.
Например, мы добавили или изменили класс. Пусть будет изменили на примере JLabel, метод setText у нее стал начинаться:
Код: java
1.
2.
3.
4.
5.
6.
    public boolean isSetted;
    public void setText(String text) {
        if (isSetted){isSetted = false; return;}
        isSetted = false;
        LabelTest.setText(this, "125");
        if (true) return;


Написали класс LabelTest:
Код: java
1.
2.
3.
4.
5.
6.
public class LabelTest {
    public static void setText(JLabel label, String text){
        label.setText(text);
        label.isSetted = true;
    }
}


Если потом их оба положить в rt.jar, то получается StackOverflow (это я с isSetted не до конца разобрался), т.е. как-бы работает.
А если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается.
Никаких JDBC, RMI нет, все самое простейшее. Тем более для JDBC драйвер нежен, с RMI я вообще не работал...
...
Рейтинг: 0 / 0
07.05.2012, 16:03:23
    #37785303
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
drewhaА если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается.

Как я уже писал выше. Проблема именно в загрузке классов, а не вызове. ClassLoader, который загрузил JLabel, ничего не знает про ваше приложение.
Зачем вы вообще так делаете? Наследование уже отменили?
...
Рейтинг: 0 / 0
07.05.2012, 16:27:55
    #37785327
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
BlazkowiczdrewhaА если LabelTest забрать из rt.jar в приложение, то NoDefClassFoundError получается.

Как я уже писал выше. Проблема именно в загрузке классов, а не вызове. ClassLoader, который загрузил JLabel, ничего не знает про ваше приложение.
Зачем вы вообще так делаете? Наследование уже отменили?

Именно так оно и есть, Родительский загрузчик не имеет доступа к классам, загруженным дочерним загрузчиком. Ну все примерно как я предполагал - легких путей не ищем. Чего уж JVM заодно не переписать.
...
Рейтинг: 0 / 0
07.05.2012, 16:38:41
    #37785337
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rt.jar и внешний мир
забыл никИменно так оно и есть, Родительский загрузчик не имеет доступа к классам, загруженным дочерним загрузчиком.

Если класс уже загружен, то родительскому загрузчику вообще пофиг. Класс может быть использован любым другим классом в JVM.
Проблема именно в самой загрузке. Можно явно загрузить класс до использования JLabel и ошибки не будет.

забыл никЧего уж JVM заодно не переписать.
С появлением OpenJDK это заявление не звучит таким уж ироничным. С другой стороны drewha не хочет объяснить зачем это всё понадобилось. Решений, ведь, может быть, масса. Задача только не ясна.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / rt.jar и внешний мир / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]