Пример выполнения математических вычислений в отдельном потоке
Данный пример показывает возможность проведения математических вычислений в отдельном потоке и возможность прервать по необходимости поток этих вычислений.
Окошко в котором производятся вычисления
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-архив




Узнай о чем ты на самом деле сейчас думаешь

