需求: 并行处理任务
描述:
某email解析小程序, 点击parse之后会解析网页中或文件中的email地址.
如果文件较大或网速较慢, 响应会比较迟钝,出现假死现象, 因此在点击Parse时, 创建一个专门用于Parse的线程, 保证程序的流程运行.
具体解决方法:
1. 监听Parse Button:
buttonParse.addActionListener(onParse);
2.onParse函数
private ActionListener onParse = new ActionListener() { public void actionPerformed(ActionEvent e){ Thread threadParseEmail = new Thread(){ @Override public void run() { // TODO Auto-generated method stub parseEmail(); } }; threadParseEmail.setName("ParseEmailThread"); threadParseEmail.start(); log.debug("Parse clicked"); };
3.parseEmail函数进行具体的处理.
private void parseEmail() { log.info("正在解析"); ...... }
log信息:
[AWT-EventQueue-0] DEBUG com.insprise.mail.parser.SwingUI – Parse clicked
[ParseEmailThread] INFO com.insprise.mail.parser.SwingUI – 正在解析
可见ParseEmail使用单独的进行进行操作, 在解析大文件时 UI不会出现假死状态.
Screenshot:
Last version: Download
Update site: http://regex-util.sourceforge.net/update/
更多信息: http://myregexp.com/eclipsePlugin.html
需求: 读取远程文件
解决方案:
URL romatefile = new URL(textFilePath.getText());
获得InputStreamromatefile.openStream()
URL romatefile = new URL(textFilePath.getText());
ParseEmail pe = new ParseEmail();
textOutput.setText(pe.parseEmail(romatefile.openStream()));
将信息复制到粘贴板, 以供后续使用.
初始化一个粘贴板实例, 获得系统粘贴板, 将信息加入到粘贴板中.
private Clipboard clipboard; //定义一个粘贴板实例;
buttonCopyToClipBoard.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { clipboard = getToolkit().getSystemClipboard(); //获得系统粘贴板 StringSelection textInfoSelected = new StringSelection(textInfo.getText()); //建立一个粘贴板内容实例. clipboard.setContents(textInfoSelected, null); //将textInfoSelected加入到粘贴板中; labelInfo.setText("The output message has copied to clipboard."); } }//end of calss );
点击CopytoClipBoard按钮后, 将output信息复制到粘贴板, 并在Info中提示复制成功.
如图:
在点击Browse时, 会弹出文件选择框,
在选择之后将文件路径显示在该按钮前方的textFiled中.
监听Browse按钮事件, 在点击之后创建一个FileDialog, 选择文件.
c.fill = GridBagConstraints.NONE; c.weightx = 0; c.anchor = GridBagConstraints.WEST; buttonBrowse.addActionListener(new ActionListener() { //监听Browse点击事件 @Override public void actionPerformed(ActionEvent e) { FileDialog fd = new FileDialog(gbl); fd.setSize(400, 300); fd.setVisible(true); filePath = fd.getDirectory() + fd.getFile(); System.out.println(filePath); textFilePath.setText(filePath); } }//end of class ); addComponent(buttonBrowse, 2, 0, 1, 1);
其中filePath为一个String, 代表文件的路径与名称.
可以看到TextFiled中的文件路径及名称.
java.io.File file = new java.io.File(filePath); if(file.isFile() && file.exists()) { System.out.println("文件存在"); }else { textInfo.setText("您选择的文件不存在, 请重新选择"); return; }
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.