Каждый современный человек владеет ноутбуком, но как самому убрать возникающие...
![Пропал звук на ноутбуке — что делать?](https://i0.wp.com/sovets.net/photos/uploads/120/8110495-2razrabotanyi-spetsialnyie-programmyi-kotoryie-testiruyut-audio-drayveryi-soundcheck.jpg)
В последнее время неоднократно всплывает тема загрузки ресурсов. Вкратце: «Я загружаю картинку из c:\work\image.gif, а когда запускаю программу из jar-файла/на другом компьютере – она не грузится. Что делать?».
Между тем, ничего сложного тут нет. Надо только понимать принципы.
Прежде всего, грузить ресурсы по абсолютному адресу на диске – занятие бесперспективное. Думаю, сами прекрасно понимаете, почему – убрали файл с диска, и «прощай ресурс». Всё свое надо носить с собой.
Второй вариант, который я часто вижу, – загрузка ресурса из jar-файла. Но тут очень часто делается одна ошибка – ресурс пытаются грузить через класс java.io.File . При том, что этот класс предназначен только для работы с файловыми системами.
Хотя сама идея правильная. Нужный ресурс действительно необходимо поместить в jar-файл. Надо только понимать, как его оттуда загрузить. Вот об этом я и расскажу.
Для загрузки ресурса служат методы java.lang.Class.getResource(String) , java.lang.Class.getResourceAsStream(Stri ng) , java.lang.ClassLoader.getResource(String) и java.lang.ClassLoader.getResourceAsStrea m(String) . Методы Class -а делегируют вызовы ClassLoader -у.
GetResource(String) по имени ресурса возвращает java.net.URL , через который можно получить этот ресурс. getResourceAsStream(String) , как нетрудно догадаться, возвращает java.io.InputStream , через который ресурс можно прочитать.
Имя ресурса представляет собой путь к ресурсу. Есть одна существенная тонкость, а именно – как оно интерпретируется.
Имя может быть абсолютным и относительным. Внешнее отличие – абсолютное имя начинается с символа "/". В первом случае ресурс ищется относительно корня classpath. Т.е. берутся все пути и jar-файлы, входящие в classpath, и ресурс ищется относительно совокупности этих точек. Если же имя относительное – к нему в начало приписывается путь, полученный из пакета текущего класса. Далее поиск ведется как в случае абсолютного имени.
Проще это понять на примерах. Пусть у нас задан classpath: c:\work\myproject\classes;c:\lib\lib.jar . Код примера находится в классе ru.skipy.test.ResourceLoadingTest .
Пример 1 . Мы используем конструкцию getClass().getResource("/images/logo.png") . Поскольку имя начинается с символа "/" – оно считается абсолютным. Поиск ресурса происходит следующим образом:
Вот тут можно скачать полностью рабочий пример, иллюстрирующий оба типа загрузки: . Ресурсы – изображение и текст – располагаются в отдельной директории, при сборке попадают в jar-файл и грузятся один по абсолютному, другой по относительному имени. Пример собирается и запускается через ant , командой ant run он запускается из директории сборки build/classes/ , командой ant run-jar – из собранного jar-файла.
Вот, где-то так. Вопросы? Комментарии?
В классе ResourceBundle.Control существует набор внешних методов, вызываемых методом ResourceBundle.getBundle() во время поиска и загрузки наборов. Создав свой класс Control , вы можете изменить поведение по-умолчанию для загрузки и кеширования.
В данном случае вам необходимо создать реализацию двух методов класса Control: getFormats() и newBundle() . Метод getFormats() отвечает за поддержку формата XML, а newBundle() работает с набором ресурсов. В базовом классе Control существуют вспомогательные методы, предназначенные для преобразования основных имен наборов в действительные имена ресурсов.
В данную реализацию класса ResourceBundle.Control включен подкласс XMLResourceBundle . Данный подкласс используется для загрузки данных из XML файла и использовании их в методе ResourceBundle .
Ниже приводится описание класса Control и реализация метода ResourceBundle:
import
java.io.*;
import
java.net.*;
import
java.util.*;
Public class
XMLResourceBundleControl
extends
ResourceBundle.Control
{
private static
String XML =
"xml"
;
Public
List getFormats
(String baseName
) {
return
Collections.singletonList
(XML
)
;
}
Public
ResourceBundle newBundle
(String baseName, Locale locale,
String format, ClassLoader loader,
boolean
reload
)
throws
IllegalAccessException, InstantiationException, IOException
{
if
((baseName ==
null
)
||
(locale ==
null
)
||
(format ==
null
)
||
(loader ==
null
)) {
throw new
NullPointerException
()
;
}
ResourceBundle bundle =
null
;
if
(format.equals
(XML
)) {
String bundleName = toBundleName
(baseName, locale
)
;
String resourceName = toResourceName
(bundleName, format
)
;
URL url = loader.getResource
(resourceName
)
;
if
(url !=
null
) {
URLConnection connection = url.openConnection
()
;
if
(connection !=
null
) {
if
(reload
) {
connection.setUseCaches
(false
)
;
}
InputStream stream = connection.getInputStream
()
;
if
(stream !=
null
) {
BufferedInputStream bis =
new
BufferedInputStream
(
stream
)
;
bundle =
new
XMLResourceBundle
(bis
)
;
bis.close
()
;
}
}
}
}
return
bundle;
}
Private static class
XMLResourceBundle
extends
ResourceBundle
{
private
Properties props;
XMLResourceBundle
(InputStream stream
)
throws
IOException
{
props =
new
Properties
()
;
props.loadFromXML
(stream
)
;
}
Protected
Object handleGetObject
(String key
) {
return
props.getProperty
(key
)
;
}
Public
Enumeration getKeys
() {
Set handleKeys = props.stringPropertyNames
()
;
return
Collections.enumeration
(handleKeys
)
;
}
}
Public static
void
main
(String args
) {
("Test2"
,
new
XMLResourceBundleControl
())
;
String string = bundle.getString
("HelpKey"
)
;
System.out.println
("HelpKey: "
+ string
)
;
}
}
В данную реализацию включена тестовая программа из трех строчек:
ResourceBundle bundle = ResourceBundle.getBundle
("Test2"
,
new
XMLResourceBundleControl
())
;
String string = bundle.getString
("HelpKey"
)
;
System.out.println
("HelpKey: "
+ string
)
;
Наибольший интерес здесь представляет первая строка. Вам необходимо передать ваш элемент Control методу getBundle() . После этого вы можете использовать набор, как и в любом другом случае.
Ниже преводится пример XML файла Test2.xml:
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
http://java.sun.com/dtd/properties.dtd
"
>
Результатом выполнения программы XMLResourceBundleControl будет:
> java XMLResourceBundleControl HelpKey: Help
В приведенной реализации не используются методы getTimeToLive() и needsReload() :
public long getTimeToLive (String baseName, Locale locale )
Public
boolean
needsReload
(String baseName,
Locale locale,
String format,
ClassLoader loader,
ResourceBundle bundle,
long
loadTime
)
Метод getTimeToLive() возвращает время жизни для наборов ресурсов, созданных при помощи ResourceBundle.Control . Наборы ресурсов сохраняются в кеше для убыстрения процесса повторной загрузки. Таким образом, при повторной загрузке набора, он будет находиться в кеше. Положительное значение времени жизни затает в милисекундах продолжительность сохранения набора в кеше без повторной проверки. По-умолчанию значением, возвращаемым методом getTimeToLive() является TTL_NO_EXPIRATION_CONTROL , отключающее проверку истечения времени хранения в кеше. Если вы не хотите кешировать набор, то верните значение TTL_DONT_CACHE . Если возвращается значение 0, то набор кешируется, но при каждом вызове метода getBundle() происходит его проверка. Для очистки кеша вызовите статичный метод clearCache() класса ResourceBundle . В нем есть не обязательный аргумент ClassLoader , позволяющий очищать кеши, созданные определенным загрузчиком.
Метод needsReload() определяет необходимость перезагрузки кешированного набора. Значение true означает, что набор необходимо перезагрузить, а false , что не его перезагружать не надо. Вы можете контролировать необходимость перезагрузки набора ресурсов при помощи перегрузки метода needsReload() . Например, если вы хотите, чтобы набор ресурсов всегда перезагружался, метод needsReload() должен всегда возвращать значние true . В этом случае метод getTimeToLive() должен возвращать всегда значение 0. Иначе набор будет сохраняться дольше, чем положено.
Для получения дополнительной информации об улучшениях, связанных с процессами интернационализации в Mustang, вы можете обратиться к блогу Джона Оконера, разработчика програмнного обеспечения фирмы Sun, по адресу
, умения , финансы, время, связи и т.д. Используя ресурсы, человек ухудшает свое состояния , понижается его эффективность и успешность . Чтобы улучшить состояние, нужно восстанавливать и развивать личные ресурсы : физические, духовные, интеллектуальные, финансовые и социальные.
Отвечают за физическое состояние человека, необходимое для выполнения физических действий и оказания воздействия на окружающую среду с оптимальной эффективностью. Для восстановления этих ресурсов требуется следующее:
Здоровое питание . Существуют полезные и вредные для здоровья продукты. Использование в рационе вредной еды провоцирует множество заболеваний: ожирение, инфаркты и инсульты из-за повышенного содержания холестерина в крови и т.п. Следует минимизировать, а лучше исключить из рациона такие вещества как соль, сахар, острое, жирное, жареное и т.п. Существует множество методик здорового питания, но ими пользуется крайне мало людей.
Отказ от вредных привычек . Курение, алкоголь и т.п. также создают проблемы со здоровьем: рак легких, цирроз печени, инфаркт и т.п. Для обеспечения отличного здоровья и долголетия нужно отказаться от этих привычек.
Отдых . Выполнение работы долгое время (по 12-14 часов в сутки) приводит к переутомлению, стрессу , срывам и психическим заболеваниям. Нагружая организм продолжительное время, появляются заболевания суставов и мышц: артроз, артрит и т.п. Для избегания подобных проблем требуется регулярный отдых. Как минимум нужно спать не 3-5 часов в сутки, а полноценных 8. Отдых делиться на пассивный и активный. Пассивный отдых (полежать на диване, посмотреть телевизор, почитать книгу..) позволяет восстановить физические силы. Активный же отдых (спорт, хобби, прогулки, путешествия...) позволяет восстановиться эмоционально. Можно применять следующий принцип : лучший отдых от работы - это выполнение другой работы. Переключайтесь между работами с разными нагрузками, например, походив несколько часов по разным офисам, можно несколько часов посидеть за своим столом и выполнить бумажную работу, разобрать почту, составить отчеты и т.п.
Для развития физических ресурсов нужно выполнять физические упражнения, повышающие силу, выносливость и гибкость тела. Посещение тренажерного зала или наем опытного тренера не является обязательным условием для этого - достаточно заниматься дома по 20-30 минут в день. Но многие люди обманывают себя, говоря что такие занятия не обязательны для выполнения основной работы, а следовательно являются бесполезными. Но они сильно заблуждаются, т.к. эти дела полезно влияют на здоровье и продлевают срок нормального функционирования тела.
Не развивая физические ресурсы, обязательно ухудшится здоровье, что значительно снижает успешность и эффективность. А сокращение продолжительности жизни приведет к тому, что человек может не успеть реализовать свое предназначение .
Духовные ресурсы определяют направление движения человека, вектор развития и формируют его внутренний стержень, за который он держится каждый день при принятии решений , составлении планов и постановки целей .
Для развития этих ресурсов требуется осознанное , методичное и целенаправленное приобретение опыта. Это происходит в детском саде, школе, колледже, вузе и других учебных заведениях. Но получив диплом, люди сводят к минимуму или прекращают самообразование. Непрерывное приобретение опыта требуется для личного развития и выполнения творческой деятельности , чтобы достичь цели жизни и реализовать личное предназначение.
Нужно регулярно изучать практические пособия, книги и журналы из предметной области, которая соответствует личному предназначению и призванию. Это дает новые знания и вдохновляет на выполнение творческой деятельности . Полученные знания нужно применять на практике для приобретения новых умений и их развития до навыков и компетенций , которые позволяют заниматься творческой деятельностью с оптимальной эффективностью.
Когда человек достигает очередной цели, он получает некий результат , который может обменять на их универсальный аналог - деньги . Они являются неким посредником и позволяют обменять уже имеющиеся результаты на ресурсы для новых целей, что повышает эффективность и успешность их достижения. Важны не только деньги, но и экономические отношения, которые и позволяют производить обмен результатов на деньги и денег на ресурсы. Для повышения эффективности таких отношений существуют финансовые институты - банки, биржи, рынки, инвестиционные и страховые компании и т.п., которые объединяют людей с результатами, деньгами и ресурсами в единое пространство, что значительно ускоряет обменные процессы между ними.
Для развития финансовых ресурсов необходимо постоянно повышать доходы и капитал и понижать расходы. Разницу между доходами и расходами всегда необходимо вкладывать для увеличения доходов: "капитал должен приносить капитал". Как минимум следует начать с откладывания процента от доходов на банковский вклад. Генерируйте идеи для организации нового бизнеса и повышения доходности инвестиций. В этом поможет мощный сервис Бесплатный онлайн органайзер, ежедневник, планировщик дел и задач, календарь - Личные цели .
Наличие развитых финансовых ресурсов делает человека свободным от денежных проблем. Ему не нужно выполнять неприятную работу только для того, чтобы получить деньги на еду и одежду. Он может сконцентрироваться только на личных целях для достижения успеха и реализации своего предназначения. Только в таких условиях человек может испытывать счастье .
Человеку для достижения целей требуется определенный опыт . Если его нет, то он может приобрести его самостоятельно. Но есть и другой вариант – установить социальные отношения с людьми, которые уже обладают этим опытом и которые помогут разобраться с проблемой, делом или целью на взаимовыгодных условиях . Взаимодействуя с такими людьми, человек повышает личную эффективность за счет взаимопомощи.
Например, есть автослесарь и электрик. Если у первого сломается телевизор, а у второго - автомобиль, они могут помочь друг другу и первый отремонтирует автомобиль, а второй - телевизор, естественно, на взаимовыгодных условиях.
Чем больше у человека связей с разными людьми, обладающими разным опытом, тем больше у него социальных ресурсов для более успешной и эффективной реализации личного предназначения.
Научитесь делать первый шаг к достижению успеха
с помощью тренинга
Тренинг уверенности в себе
Научитесь придумывать способы развития личных ресурсов
с помощью тренинга
Я решил продолжить эту актуальную тему. Я составил список лучших ресурсов для изучения html и css, чтобы помочь желающим в изучении этих вопросов. Помню, когда сам начинал вебмастером, мне очень не хватало подобной подборки качественных и полезных ресурсов.
Сначала немного определений:
Html (от английского "HyperText Markup Language" - язык разметки гипертекста) - это стандартный язык разметки веб-страниц.
Css (от английского "Cascading Style Sheets" - каскадные таблицы стилей) - это технология описания внешнего вида веб-страницы.
Без знания html и css вести свой сайт будет очень проблематично - даже счетчик статистики или тот же баннер поставить не получится. Не бегать же за помощью к специалистам или создавать тему за темой на форумах? Нужно просто взять и выучить.
По своему опыту могу сказать, что html и css можно выучить за 1 месяц. Конечно, я не говорю о профессиональных высотах - вы до них сами доберетесь при желании.
На мой взгляд, лучший способ выучить html, css, да и другие тематики, включая продвижение сайтов - это завести свой сайт и на нем практиковаться. Кстати, можете посмотреть первый созданный мною сайт по картам для игры Counter-Strike , созданием которых я тогда увлекался. Вот карты и их скрины , созданные стариком Глобатором в те времена, когда он еще не знал, что такое топ-10, тИЦ и PR, и беззаботно резвился на солнышке создавал трехмерные карты 🙂 . Я создал этот сайт за месяц, изучая html и css на практике.
Для того, чтобы выучить html и css, совсем необязательно быть техническим специалистом. К примеру, я вообще гуманитарий и по математике у меня в основном было "2" 🙂 . Так что выучить html и css под силу любому желающему. Перечисленные мною ресурсы подойдут также и для того, чтобы в любой момент вы могли с их помощью выяснить какой-либо интересующий вас момент по html и css.
Сайты для изучения html и css
Начну подборку полезных ресурсов для изучения html и css с сайта, по которому я сам занимался. Это Дикие уроки html , которые написала Валентина Ахметзянова ака Дикарка . Она настолько весело и интересно описала все необходимые моменты, что изучение html и css с помощью ее уроков превращается в увлекательное занятие. Кстати, можете почитать для блога сайт. Диких уроков вполне достаточно, чтобы выучить html и css на необходимом для работы вебмастером уровне.
Представляете, кем бы я был, если бы развивался дальше в теме Фотошопа? Я бы был настоящим монстром! Но я связался с SEO и прозябаю тут, набирая эти буквы скрюченными от мороза пальцами 🙂 . Да шучу, тут тоже тепло и неплохо кормят 🙂 .
Консорциум Всемирной паутины (World Wide Web Consortium, W3C) рекомендовал технологию CSS (Cascading Style Sheets) в 1996 году. С тех пор веб-разработчики используют каскадные таблицы стилей для создания уникального оформления сайтов.
Двадцать лет назад разработчики играли с параметрами шрифтов, атрибутами текста и цветами элементов страницы. Сейчас в ходу анимации, тени, градиенты, сглаживания и многие другие продвинутые вещи.
Установите расширение Web Developer для Chrome или дополнение Disable CSS для Firefox, чтобы полюбоваться любимыми сайтами без каскадных таблиц стилей.
Изменения будут разительными, хотя и не всегда. Например, новостной агрегатор Drudge Report почти не изменится: он прост как дважды два. Тем не менее ежемесячно ресурс просматривают свыше 150 миллионов раз.
Будем последовательны и начнём с крепкой теоретической базы. За ней обратимся к Владу Мержевичу, автору книг и веб-разработчику, который поддерживает несколько качественных ресурсов о вёрстке и стилизации веб-страниц.
На вы найдёте понятный самоучитель и ответы на популярные вопросы о каскадных таблицах стилей. Здесь же представлены обучающие статьи об актуальной третьей спецификации CSS.
Предлагает алфавитный справочник по CSS. Каждое свойство имеет краткое описание, синтаксис и живой пример. Не стесняйтесь задавать вопросы - авторы проекта выходят на связь и охотно обсуждают детали.
В дополнение к русскоязычным самоучителям добавим зарубежные сайты. Некоторым студентам с их помощью проще вникать в профессию и принимать её терминологию. Поэтому всё внимание на . На сайте нет ничего лишнего: свойства CSS, пояснения и действие. Из приятных мелочей отметим быстрый поиск и копирование свойства в буфер обмена по щелчку мыши.
Обучение - дело долгое и порой скучное. Неплохо бы найти мотивацию, чтобы она помогала в трудные минуты. Вдохновляться будем у других веб-дизайнеров, а точнее на сайте . Здесь каждый день представляют качественный проект, который служит образцом того, к чему стоит стремиться. Многие из победителей действительно удивляют. Не забывайте заглядывать и голосовать за понравившихся номинантов.
Заручившись знаниями и маяком, пора испытать свои силы в деле. И чтобы долго не выбирать дорогу, направим вас на страницу . На ней выложен неизменный HTML-файл, которому пользователи со всего света пытаются придать неординарный дизайн с помощью каскадных таблиц стилей.
Загрузите эталонный HTML, добавьте своё оформление и отправьте всё это обратно. Возможно, ваш подход окажется самым лучшим. К слову, можно скачать чужой вариант и посмотреть, как же он реализован.
Понятное дело, что вам захочется применить нечто эдакое, что привлечёт всеобщее внимание. Не знаем, есть ли такое на , но десятки и сотни любопытных приёмов там точно завалялись.
Скачать код напрямую не получится. Вам придётся залезть в меню разработчиков - такова политика местной партии. При этом подавляющее большинство CSS-стилей можно использовать без разрешения автора.
Зачем нам чужое, если у самих руки прямо растут? Так ли оно на самом деле покажет . Помимо базовой проверки синтаксиса CSS, веб-сервис выполняет проверку на соответствие правилам, которые влияют на скорость загрузки страниц. На выходе получаем хороший, милый для браузеров CSS-код.
А какие ресурсы о каскадных таблицах стилей можете посоветовать вы?