Java programming выпуск 17-й
Здравствуйте дорогие читатели!
Последнее время приходят письма подобного содержания:
Хотелось бы реализовать скрипт на Java, который бы отправлял e-mail на заранее определённый адрес информацию из формы (стандартная форма: Имя, E-mail и т.д.), только при этом не вызывался почтовик, т.е. занёс информацию в форму, нажал кнопку и всё.
Повторяю на JavaScript такое сделать нельзя, а вот на Java можно, привожу пример отправки почты из приложения.
Начинающим
Проведённый в прошлом номере тест дал неутешительные результаты средний балл 21.7, что тянет на оценку удовлетворительно.
Проведём разборку данного теста:
1. Сколько в языке Java определено базовых типов данных?
2. Какой размер области памяти занимает тип int?
Отвечая на первые два вопроса приведу таблицу:
Тип | Занимаемое место в памяти |
boolean | 1 бит |
char | 16 бит |
byte | 8 бит |
short | 16 бит |
int | 32 бита |
long | 64 бита |
float | 32 бита |
double | 64 бита |
3. Какой из этих примеров не работоспособен?
1.
class HelloWorld { public static void main (String args []) { //Выводим на экран Hello World System. out. println ("Hello World"); } } |
2.
class HelloWorld { public static void main (String args []) { /*Выводим на экран Hello World*/ System. out. println ("Hello World"); } } |
3.
class HelloWorld { public static void main (String args []) { /*Выводим на экран Hello World System. out. println ("Hello World"); } } |
4.
class HelloWorld { public static void main (String args []) { //Выводим на экран Hello World// System. out. println ("Hello World"); } } |
Если я проведу выделение всех комментариев то думаю всё станет понятно:
1.
class HelloWorld { public static void main (String args []) { //Выводим на экран Hello World System. out. println ("Hello World"); } } |
2.
class HelloWorld { public static void main (String args []) { /*Выводим на экран Hello World*/ System. out. println ("Hello World"); } } |
3.
class HelloWorld { public static void main (String args []) { /*Выводим на экран Hello World System. out. println ("Hello World"); } } |
4.
class HelloWorld { public static void main (String args []) { //Выводим на экран Hello World// System. out. println ("Hello World"); } } |
Видно что третий пример работать не будет.
4. Какой результат выведется на экран?
byte b = 100; b=(byte)(b*2); if(b==200)b=0; b+=56; System. out. println (b);Вторая строчка кода b=(byte)(b*2); даст нам результат -56, так как произоёдёт верхнее переполнение (-127+(128+1-200)). И на экран выведется 0 (-56+56=0).
5. Какой результат выведется на экран?
double matrix [][] = new double [4][]; matrix [0] = new double[4]; matrix[1] = new double[4]; matrix[2] = new double[4]; matrix[3] = new double[4]; System. out. println (matrix[3][0]);
Так как тип хранимых в массиве данных double, то на экран выведется 0.0
6. Какой результат выведется на экран?
boolean a=true; boolean b=true; boolean c=false; if ((a&&b;)^c) System.out.println ("true"); else System.out.println ("false");
Истина и истина = истина, истина или ложь = истина. Результат вывода true
7. У какого из перечисленных операторов самый высокий приоритет
*
!
=
/
Правильный ответ !. О приоритете операторов смотрите
15-й выпуск .
Тема "на заказ"
Многопоточность (продолжение)
Реализация интерфейса Runnable
Описанный в прошлом номере способ создания потоков как объектов класса Thread или унаследованных от него классов кажется достаточнао естественным. Однако этот способ не единственный. Если вам нужно создать только один поток, работающий одновременно с кодом аплета, проще выбрать второй способ с использованием интерфейса Runnable.
Идея заключается в том, что основной класс аплета, который является дочерним по отношению к классу Applet, дополнительно реализует интерфейс Runnable:
public class MultiSmile extends Applet implements Runnable { Thread multiSmple = null; . . . public void run() { . . . } public void start() { if (multiSmple == null) { multiSmple = new Thread(this); multiSmple.start(); } } public void stop() { if (m_MultiTask != null) { multiSmple.stop(); multiSmple = null; } } }
Внутри класса необходимо определить метод run, который будет выполняться в рамках отдельного потока. При этом можно считать, что код аплета и код метода run работают одновременно как разные потоки.
Для создания потока используется оператор new. Поток создается как объект класса Thread, причем конструктору передается ссылка на класс аплета:
multiSmple = new Thread(this);
При этом, когда поток запустится, управление получит метод run, определенный в классе аплета.
Как запустить поток?
Запуск выполняется, как и раньше, методом start. Обычно поток запускается из метода start аплета, когда пользователь отображает страницу сервера Web, содержащую аплет. Остановка потока выполняется методом stop.
В следующем номере мы затронем тему синхронизации потоков.
Вопрос - ответ
Вопрос: Как вычитать строку (String) из файла с учетом кодировки.
|
Ответ: BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream("file"), "нужная_кодировка")); String s; while((s = br.readLine()) != null) {} |
Вопрос: У меня апплет состоит из трех панелей. Хочу поставить scrollbar в панель аплета,
не могу разобраться как осуществлять контроль размеров окна аплета,
хотя я вставил конструктор dimension и в init() через if анализирую
высоту и ширину, но толку нет, да одна особенность у меня эта панель
имеет компоновку CardLayouot. Как контролировать размеры окна и
вставить туда scrollbar
|
Ответ: Контролировать размеры окна апплета невозможно так как они устанавливаются HTML тэгом applet. Что касается scrollbar, то в панели из библиотеки AWT нет такой возможности, а вот у JPanel из библиотеки Swing есть setAutoscrolls(boolean). |
Вопрос: Не могу понять все говорят что swing круче чем AWT но как не
посмотришь все почему-то в примерах делают все с помощью AWT.где
правда?
|
Ответ: Просто до ближайшего времени броузеры не держали библиотеки Swing. Сейчас с JDK 1.4 идет plug-in с которым работает и Swing. |
Вопрос: Небольшая проблема в том что не могу по человечески написать
событие mouseEntered на кнопку, чтобы при в ходе на кнопку, кнопка
меняла свой цвет, например. Я работаю на Cafe и визуальными
средствами это сделал но мне это, но мне это жутко не нравится так как
я все привык ручками.
|
Ответ: Привожу пример “сделанный ручками” в разделе “Программный код…” (причем используя Swing) |
Программный код…
import java.awt.*; import java.awt.event.*; import javax.swing.*; class SampleButton extends JFrame { JButton myButton = new JButton("Ok"); public SampleButton() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); myButton.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { myButton.setBackground(Color.blue); } public void mouseExited(MouseEvent e) { myButton.setBackground(Color.red); } }); myButton.setBackground(Color.red); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(myButton,BorderLayout.NORTH); } public static void main(String args[]) { System.out.println("Starting SampleButton..."); SampleButton mainFrame = new SampleButton(); mainFrame.setSize(400, 400); mainFrame.setTitle("SampleButton"); mainFrame.setVisible(true); } }Jar-архив
JavaScript
Вопрос: Как узнать название броузера?
|
Ответ: Название и версию броузера можно узнать следующим образом: <script; language="JavaScript"> <!-- browserName=navigator.appName; browserVer=parseInt(navigator.appVersion); document.write(browserName); document.write(" "+browserVer);//--> </script> |
Вопрос: Подскажите (желательно ссылку) более-менее хороший учебник по java-scripts. Особенно интересуют переменные и как начать программировать, хотя бы делать небольшие скрипты.
|
Ответ: По моему мнению, для начинающих хороша книга Стефана Коха (Stefan Koch) "JAVASCRIPT ДЛЯ МАГА", даю ссылку на страничку downloads где вы можете скачать zip-архив(правда книга в doc файлах и архив соответственно 340Кб). |
Вопрос: Нужна информация о том, от куда пришёл посетитель. Как скриптом можно получить эту информацию.
|
Ответ: document.referer |
Вопрос: Этот вопрос я задавал Вам раньше, но немного не так сформулировал. Как сделать чтобы указанные мной в исходниках числовые значения radio, checkbox и text складывались. Не обязательно чтобы значения стояли в value можно в любом другом месте, как вам будет удобнее и желательно что бы я смог их сам поменять. Но тут возникает небольшое усложнение, мне надо, что бы в поле text 6 вводилось некое число. Если это число от 1 до 9 включительно то оно должно умножиться на 150, если это число от 10 до 30 включительно оно должно умножиться на 130, если это число более 30 то оно должно умножиться на 100. После этого все отмеченные значения должны сложиться. Сумма по нажатию кнопочки "Подсчитать" должна выводится в текстовую строчку или в текст.
|
Ответ:
Смотрите немного изменённую версию примера Суммирование значений атрибута value всех отмеченные radio и checkbox и вывод их суммы: |
Вопрос: В 16-м номере приведёна ссылка на пример для вывода произвольной строки, хотелось бы таким-же образом выводить сообщение в зависимости от текущей даты.
|
Ответ: Вот этот скрипт : <script; language="JavaScript"> num1=Math.ceil(Math.random()*19); a=parent.frame1.document.anchors[num1]; document.write(a.name); </script>заменяем, например, следующим: <script; language="JavaScript"> num1=new Date(); b=num1.getDate() if(b>20)b=b-20; a=parent.frame1.document.anchors[b]; document.write(a.name); </script> Строка будет выводится в зависимости от дня |
Вопрос: Как сделать проверку вводимых данных в форму?
|
Вопросы присылайте на E-mail
[email protected] с пометкой "Вопрос по Java".
Жду вопросов и предложений.
Подписаться на эту рассылку и посмотреть архив можно тут /subs/subs.html