» Главная
eXcode.ru » Статьи » JAVA / JavaScript » Java » Примеры
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 12





Пример выполнения математических вычислений в отдельном потоке




Данный пример показывает возможность проведения математических вычислений в отдельном потоке и возможность прервать по необходимости поток этих вычислений.

Окошко в котором производятся вычисления


package untitled1;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Frame1 extends JFrame implements Runnable
{
 //Компоненты интерфейса
 JPanel contentPane;
 BorderLayout borderLayout1 = new BorderLayout();
 JButton jButton1 = new JButton("Start");
 JButton jButton2 = new JButton("Stop");
 JToolBar jToolBar1 = new JToolBar();
 JLabel result = new JLabel("0");
 JLabel status = new JLabel("Status: No starting");
 Thread mainThread = null;// Наш поток с вычислениями
 boolean threadStart=false;

 /**Construct the frame*/
 public Frame1()
 {
  enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  try
  {
   jbInit();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
 /**Component initialization*/
 private void jbInit() throws Exception
 {
  contentPane = (JPanel) this.getContentPane();
  contentPane.setLayout(borderLayout1);
  this.setSize(new Dimension(300,200));
  this.setTitle("Example Thread");
  this.setResizable(false);

  //При нажатии на кнопочку jButton1 вызываем метод
  //запускающий наш поток с вычислениями
  jButton1.addActionListener(
   new java.awt.event.ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    jButton1_actionPerformed(e);
   }
  });

  //При нажатии на кнопочку jButton2 вызываем метод
  //останавливающий наш поток с вычислениями
  jButton2.addActionListener(
   new java.awt.event.ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    jButton2_actionPerformed(e);
   }
  });
  //Делаем кнопочку Stop не активной
  jButton2.setEnabled(false);
  jToolBar1.add(jButton1);
  jToolBar1.add(jButton2);
  //Текст по центру
  result.setHorizontalAlignment(JLabel.CENTER);
  //Добавляем компоненты на основную панель
  contentPane.add(jToolBar1,BorderLayout.NORTH);
  contentPane.add(result, BorderLayout.CENTER);
  contentPane.add(status,BorderLayout.SOUTH);
 }

 //Метод запускающий поток
 public void run()
 {
 //Здесь вычисления
  int counter=0;
  while(threadStart==true)
  {
   counter++;
  }
  //Выводим результат вычислений
  result.setText("Process stoped on "+counter+" iteration");
 }
 /**Overridden so we can exit when window is closed*/
 protected void processWindowEvent(WindowEvent e)
 {
  super.processWindowEvent(e);
  if (e.getID() == WindowEvent.WINDOW_CLOSING)
  {
   //Убиваем поток при выходе
   threadStart=false;
   mainThread=null;
   System.exit(0);
  }
 }

 //Метод вызывается при нажатии на кнопочку jButton1
 //Start
 void jButton1_actionPerformed(ActionEvent e)
 {
  //Стартуем поток
  threadStart=true;
  mainThread = new Thread(this);
  mainThread.setPriority(Thread.NORM_PRIORITY);
  mainThread.start();
  //Делаем кнопочку Start не активной
  jButton1.setEnabled(false);
  //Делаем кнопочку Stop активной
  jButton2.setEnabled(true);
  //Выводим статус
  status.setText("Status: Process running");
 }

 //Метод вызывается при нажатии на кнопочку jButton2
 //Stop
 void jButton2_actionPerformed(ActionEvent e)
 {
  //Убиваем поток
  threadStart=false;
  mainThread=null;
  //Делаем кнопочку Start активной
  jButton1.setEnabled(true);
  //Делаем кнопочку Stop не активной
  jButton2.setEnabled(false);
  //Выводим статус
  status.setText("Status: Process reset");
 }
}

Класс запускающий всю конструкцию


package untitled1;

import javax.swing.UIManager;
import java.awt.*;

public class Application1
{
 boolean packFrame = false;
 /**Construct the application*/
 public Application1()
 {
  Frame1 frame = new Frame1();
  //Validate frames that have preset sizes
  //Pack frames that have useful preferred size info, 
  //e.g. from their layout
  if (packFrame)
  {
   frame.pack();
  }
  else
  {
   frame.validate();
  }
  //Center the window
  Dimension screenSize = 
   Toolkit.getDefaultToolkit().getScreenSize();
  Dimension frameSize = frame.getSize();
  if (frameSize.height > screenSize.height)
  {
   frameSize.height = screenSize.height;
  }
  if (frameSize.width > screenSize.width)
  {
   frameSize.width = screenSize.width;
  }
  frame.setLocation((screenSize.width - frameSize.width) / 2,
   (screenSize.height - frameSize.height) / 2);
  frame.setVisible(true);
 }
 /**Main method*/
 public static void main(String[] args)
 {
  try
  {
   UIManager.setLookAndFeel(
    UIManager.getCrossPlatformLookAndFeelClassName());
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  new Application1();
 }

Jar-архив
К началу статьи





Добавил: MadvEXДата публикации: 0000-00-00 00:00:00
Рейтинг статьи:2.50 [Голосов 4]Кол-во просмотров: 5320

Комментарии читателей

Всего комментариев: 92

2018-12-06 13:30:16
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 13:06:01
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 12:41:50
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 12:18:27
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 11:54:24
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 11:31:08
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 11:07:47
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 10:44:50
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 10:21:16
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio

2018-12-06 09:56:40
Andreygow
Вывод в ТОП-10 Яндекс и Google.

Interpult Studio
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Каким ICQ-клиентом вы пользуетесь?
Стандартным ICQ - клиентом.
11% (23)
Miranda 'ой
13% (29)
крысой - &RQ
5% (10)
Своим собственным :)
4% (8)
Не пользуюсь, так как сижу на модеме :(
1% (3)
Не пользуюсь, мне и так хорошо ...
6% (13)
Qip'ом
56% (121)
Другим
4% (8)

Проголосовало: 215
Новая марка монохромных мониторов ViewSonic имеет в качестве символа трех пингвинов.
Рейтинг: 5.5/10 (2)
Посмотреть все анекдоты