Java programming выпуск 16-й
Здравствуйте дорогие читатели!
Начинающим
Сегодня теории не будет!
Дабы закрепить пройденный теоретический материал предлагаю пройти небольшой тест и проверить свои знания.
Тема "на заказ"
Многопоточность (продолжение)
Реализация многопоточности в Java
Для реализации многопоточности предусмотрен класс java.lang.Thread. В этом классе определены все методы, необходимые для создания потоков, управления их состоянием и синхронизации.
Как пользоваться классом Thread?
Есть две возможности.
Второй способ особенно удобен в тех случаях, когда ваш класс должен быть унаследован от какого-либо другого класса (например, от класса Applet) и при этом вам нужна многопоточность. Так как в языке программирования Java нет множественного наследования, невозможно создать класс, для которого в качестве родительского будут выступать классы Applet и Thread. В этом случае реализация интерфейса Runnable является единственным способом решения задачи.
Посмотреть описание класса Thread.
Рассмотрим первый способ реализации многопоточности, при использовании этого способа определяем для потока отдельный класс:
class DrawSmile extends Thread { . . . public void run() { . . . } }
Здесь определен класс DrawSmile, который является дочерним по отношению к классу Thread.
Обратите внимание на метод run. Создавая свой класс на базе класса Thread, вы должны всегда определять этот метод, который и будет выполняться в рамках отдельного потока.
Заметим, что метод run не вызывается напрямую никакими другими методами. Он получает управление при запуске потока методом start.
Как это происходит?
Рассмотрим процедуру запуска потока на примере некоторого аплета.
Вначале ваше приложение должно создать объект класса Thread:
public class MultiSmile extends Applet { Thread mSmile = null; . . . public void start() { if (mSmile == null) { mSmile = new DrawSmile(this); mSmile.start(); } } }
Создание объекта выполняется оператором new в методе start, который получает управление, когда пользователь открывает документ HTML с аплетом. Сразу после создания поток запускается на выполнение, для чего вызывается метод start.
Что касается метода run, то если поток используется для выполнения какой либо периодической работы, то этот метод содержит внутри себя бесконечный цикл. Когда цикл завершается и метод run возвращает управление, поток прекращает свою работу нормальным, не аварийным образом. Для аварийного завершения потока можно использовать метод interrupt.
Остановка работающего потока выполняется методом stop. Обычно остановка всех работающих потоков, созданных аплетом, выполняется методом stop класса аплета:
public void stop() { if (m_DrawRectThread != null) { mSmile.stop(); mSmile = null; } }
Напомним, что этот метод вызывается, когда пользователь покидает страницу сервера Web, содержащую аплет.
В следующем номере мы рассмотрим реализацию интерфейса Runnable.
Вопрос - ответ
Вопрос: При запуске java HellowWorld выдает ошибку следующего содержания Exeption in thread "main" java.lang.NoClassDefFoundError |
Ответ: Скорее всего неправильно задан CLASSPATH. |
Вопрос: А как возможно поменять цвет текста у SWT Button ?
И если все же это нельзя сделать - то почему? |
Ответ: button1.setForeground(Color c); |
Вопрос: Объясните, пожалуйста, простым языком, что такое Java. Я не могу понять, что это такое и с чем его едят. Дело в том, что я выхожу на некоторые сайты, которые предлагают мне загрузить эту программу, но у меня отказывается его загружать. И я не могу посмотреть анимацию открыток. В 98 он у меня стоял, а когда я установила WinXP, то его в этой программе не оказалось. Помогите мне разобраться. Пожалуйста. Валентина |
Ответ:
На вопрос что такое Java читайте первые четыре выпуска. |
Вопрос: Как в Java сделать что то на подобии MDI интерфейса? Андрей |
Ответ: Пример кода помещаю в раздел "Программный код..." |
Программный код…
package xeditor; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.JDesktopPane; import javax.swing.JInternalFrame; public class MainFrame extends JFrame { JPanel contentPane; JDesktopPane mainPane = new JDesktopPane(); JInternalFrame iFrame1 = new JInternalFrame(); JInternalFrame iFrame2 = new JInternalFrame(); JButton jButton1 = new JButton(); public MainFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize((int)screenSize.getWidth(),(int)screenSize.getHeight()); this.setTitle("X Editor"); jButton1.setText("Show Frame 2"); jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton1_mouseClicked(e); } }); contentPane.add(mainPane); iFrame1.setTitle("Frame 1"); iFrame1.setSize(200,200); iFrame1.setResizable(true); iFrame1.setClosable(true); iFrame1.setIconifiable(true); iFrame1.show(); iFrame2.setTitle("Frame 2"); iFrame2.setSize(200,200); iFrame2.setLocation(300,300); mainPane.add(iFrame1); iFrame1.getContentPane().add(jButton1); mainPane.add(iFrame2); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } void jButton1_mouseClicked(MouseEvent e) { iFrame2.show(); } }
JavaScript
Вопрос:Вы не знаете как сделать, что бы при шелчке по кнопке "Подсчитать"
суммировались все отмеченные radio и checkbox и выводились их сумма. Например суммировались числа написанные в value.
Я пытался сделать, но у меня не хватило знаний JS. Будет просто замечательно, если ответ будет выводиться не в окошке а писаться в
документ(document.write - что-то вроде этого).
|
||||||||||||||||||||||||||||||||||||||||||||
Ответ:
Вот посмотрите пример: Суммирование значений атрибута value всех отмеченные radio и checkbox и вывод их суммы. |
||||||||||||||||||||||||||||||||||||||||||||
Вопрос: Функция Math.random() выдаёт только числа в диапазоне [0, 1) и контролировать это нельзя. Как вывести случайное число в диапазоне от A до B: |
||||||||||||||||||||||||||||||||||||||||||||
Ответ: a+((b-a)*Math.random()) |
||||||||||||||||||||||||||||||||||||||||||||
Вопрос:
Я хочу сделать что бы выводилась произволная строка! например-какая нибудь фраза фоменко - как сделать? можно что бы бралось из файла на сервере или как нибудь ещё лижбы работало!
|
||||||||||||||||||||||||||||||||||||||||||||
Ответ: Такое с помощью JavaScript сделать нельзя, для этого можно использовать соответствующие технологии (JSP, PHP, ASP, Perl и др.) Но что делать тому кому недоступны данные технологии? И я поразмыслив немного придумал обходной вариант: смотрите тут. |
||||||||||||||||||||||||||||||||||||||||||||
Вопрос: Нужен скрипт (код), функция у него такая. В чате открывается окно со смайлами (_blank), и мне нужно чтобы при нажатие на нужный смайлик его код появлялся в строке сообщения чата. |
||||||||||||||||||||||||||||||||||||||||||||
Ответ: Смотрите реализацию примера |
||||||||||||||||||||||||||||||||||||||||||||
Вопрос:
Здраствуйте. Хотелось бы узнать несколько скриптов: |
||||||||||||||||||||||||||||||||||||||||||||
Ответ:
2. На зтот вопрос я немогу ответить так как незнаю каким образом загружаются новости с другого сайта. |
||||||||||||||||||||||||||||||||||||||||||||
Вопрос: Как с помощью JavaScript(формы) отправить на
указанный email файл в прикрепленном виде?
|
||||||||||||||||||||||||||||||||||||||||||||
Ответ:
С помощью JavaScript такого сделать нельзя. Для этого в форме надо использовать, например, cgi-скрипт работающий на стороне сервера. |
||||||||||||||||||||||||||||||||||||||||||||