java 简单示例关于swingworker
来源:互联网 发布:php多进程编程实例 编辑:程序博客网 时间:2024/05/22 02:27
今天看来一点java的swingworker难怪我之前写的界面加线程不起作用。当java中界面有涉及到线程,且线程可能会对流进行处理,这个时候用swingworker最好不过了。
我将书上的代码记录下来。也算练习了一遍
/**
* author:zr
* date:2013/4/17
* Frame has a text area to show the contents of a text file,a menu to open a file and cancel the opening
* process ,and a status line to show the file loading progress
**/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
import java.util.concurrent.*;
import javax.swing.*;
public class SwingWorkerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame=new SwingWorkerFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
);
}
}
//
class SwingWorkerFrame extends JFrame
{
private JFileChooser chooser;
private JTextArea textArea;
private JLabel statusLine;
private JMenuItem openItem;
private JMenuItem cancelItem;
private SwingWorker<StringBuilder, ProgressData> textReader;
public static final int DEFAULT_WIDTH=450;
public static final int DEFAULT_HEIGHT=350;
public SwingWorkerFrame ()
{
chooser=new JFileChooser();
chooser.setCurrentDirectory(new File("."));
textArea=new JTextArea();
add(new JScrollPane(textArea));
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
statusLine=new JLabel();
add(statusLine,BorderLayout.SOUTH);
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
JMenu menu=new JMenu("File");
menuBar.add(menu);
openItem=new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int result=chooser.showOpenDialog(null);
if(result==JFileChooser.APPROVE_OPTION)
{
textArea.setText("");
openItem.setEnabled(false);
textReader=new TextReader(chooser.getSelectedFile());
textReader.execute();
cancelItem.setEnabled(true);
}
}
}
);
cancelItem=new JMenuItem("cancel");
menu.add(cancelItem);
cancelItem.setEnabled(false);
cancelItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
textReader.cancel(true);
}
} );
}
private class ProgressData
{
public int number;
public String line;
}
private class TextReader extends SwingWorker<StringBuilder,ProgressData>
{
private File file;
private StringBuilder text=new StringBuilder();
TextReader(File _file)
{
this.file=_file;
}
@Override
protected StringBuilder doInBackground() throws Exception {
int lineNumber=0;
Scanner in=new Scanner(new FileInputStream(file));
while(in.hasNext())
{
String line=in.nextLine();
lineNumber++;
text.append(line);
text.append("\n");
ProgressData data=new ProgressData();
data.number=lineNumber;
data.line=line;
publish(data);
Thread.sleep(1000); //使过程更加的明显
}
return text;
}
public void process(List<ProgressData> data)
{
if(isCancelled())
return ;
StringBuilder b=new StringBuilder();
statusLine.setText(""+data.get(data.size()-1).number);
for(ProgressData d:data)
{
b.append(d.line);
b.append("\n");
}
//text.append(b.toString());
textArea.append(b.toString());
}
public void done()
{
StringBuilder result;
try {
result = get();
textArea.setText(result.toString());
statusLine.setText("Done");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- java 简单示例关于swingworker
- java SwingWorker
- java-swingworker
- Java简单案例:JProgressBar与SwingWorker的配合实用
- SwingWorker 简单使用方法
- SwingWorker
- SwingWorker
- SwingWorker
- 【Java线程】SwingWorker的用法
- java线程swingworker的运用
- 【JAVA线程】SwingWorker的用法
- 【转】Java SwingWorker(一)
- 【转】Java SwingWorker(二)
- 【转】Java SwingWorker(三)
- 【Java线程】SwingWorker的用法
- Java界面中使用SwingWorker
- 关于JAVA do--while的简单示例说明记录
- Java RMI 简单示例
- VoIP(1)-基本原理和发展历程
- ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
- VoIP技术(2)-RTP/RTCP/SRTP语音传输技术
- C++沉思录句柄2
- rqnoj-165
- java 简单示例关于swingworker
- C++沉思录句柄3
- PCI9054(2)
- CocoStudio 《UI编辑器》 教程(转)
- DB2 Alter Table简介及使用
- 分享给大家一个比较正规的java坦克大战教学视频,希望对那些想学Java的人有些帮助
- 中国境内IGS站点及代号 以及 UCSD的GPS精密星历、IGS站数据等下载
- Javascript BOM
- VoIP技术(3)-语音编码算法