Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

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

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

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

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


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-архив

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95