文本计算器(加入异常处理)

之前的文本计算器不能提示错误,并且输入错误的时候可能导致程序卡死,之前还不太会异常处理,这个版本加入了异常处理,能简单的分析错误原因,下面是源码,请多指教:


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class TxtCalculator implements ActionListener
{
	JFrame f;
	JPanel pTxt = new JPanel();
	JTextField txt;
	JPanel pShow = new JPanel();
	JTextArea show;
	JMenu mEdit;
	JMenu mView;
	JMenu mHelp;
	JMenuItem mSave;
	JMenuItem mClear;
	JMenuItem mHelpItem;
	JMenuItem mAbout;
	static JButton start;
	String strAll[][]=new String[100][100];
	public TxtCalculator()
	{	
		f = new JFrame("文本计算器");
		JMenuBar mBar = new JMenuBar();
		mBar.setOpaque(true);
		mEdit = new JMenu("编辑");
		mSave = new JMenuItem("保存历史");
		mSave.addActionListener(this);
		mEdit.add(mSave);
		mClear = new JMenuItem("清空历史");
		mClear.addActionListener(this);
		mEdit.add(mClear);
		mHelp = new JMenu("帮助");
		mHelpItem = new JMenuItem("帮助主题");
		mHelpItem.addActionListener(this);
		mHelp.add(mHelpItem);
		mAbout = new JMenuItem("关于计算器");
		mAbout.addActionListener(this);
		mHelp.add(mAbout);
		mBar.add(mEdit);
		mBar.add(mHelp);
		f.setJMenuBar(mBar);
		txt = new JTextField();
		pTxt.setLayout(new BorderLayout());
		pShow.setLayout(new BorderLayout());
		start = new JButton("开始计算");
		start.setForeground(Color.blue);
		txt.addKeyListener(new KeyListener()
		{
			public void keyPressed(KeyEvent e)
			{
				int keyCode = e.getKeyCode();
				if (keyCode == KeyEvent.VK_ENTER)
				{
					System.out.println("系统管理员:用户按下了回车键");
					start.doClick();
				}
			}
			public void keyReleased(KeyEvent args) {}
			public void keyTyped(KeyEvent args) {}
		});
		start.addActionListener(this);
		show = new JTextArea("");
		show.setLineWrap(true);
		show.setEditable(false);
		txt.requestFocus();
		pTxt.add(txt,BorderLayout.CENTER);
		pTxt.add(new JScrollPane(start),BorderLayout.EAST);
		pShow.add(pTxt,BorderLayout.NORTH);
		JScrollPane show2=new JScrollPane(show);
		pShow.add(show2,BorderLayout.CENTER);
		f.add(pShow);
		f.setSize(new Dimension(300,270));
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		Dimension fra=f.getSize();
		f.setLocation((screenSize.width-fra.width)/2,(screenSize.height-fra.height)/2);
		f.setResizable(false);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.out.println("系统管理员:用户已经关闭软件!");
				System.exit(0);
			}
		});
	}
	public void actionPerformed(ActionEvent e)
	{
		String s = e.getActionCommand();
		if(s.equals("保存历史"))
		{
			System.out.println("系统管理员:用户按下了“保存历史”菜单");
			try
			{
				FileWriter txtWriter=new FileWriter("History.txt");
				BufferedWriter writer=new BufferedWriter(txtWriter);		
				String S=show.getText();
				S="/*文本计算器*/\r\n/*制作人:Sqrt5*/\r\n/*欢迎交流使用!*/\r\n/*E-mail:2.236068@gmail.com*/\r\n/*这是文本计算器的保存文件,可以根据您的需要在这里面保存记录*/\r\n\r\n"+S;
				writer.write(S);
				writer.close();
				System.out.println("系统管理员:历史History.txt已经保存到CLASS文件根目录!");
				JOptionPane.showMessageDialog(null,"历史History.txt已经保存到CLASS文件根目录!","提示",JOptionPane.WARNING_MESSAGE);
				Runtime.getRuntime().exec("cmd /c start .\\");
			}catch(IOException ee){}
		}
		else if(s.equals("清空历史"))
		{
			show.setText("");
			System.out.println("系统管理员:用户按下了“清空历史”菜单");
		}
		else if(s.equals("帮助主题"))
		{
			System.out.println("系统管理员:用户按下了“帮助主题”菜单");
			JOptionPane.showMessageDialog(null,"输入表达式即可,只支持有理数和括号\"(\"、\")\",输入\"help\"可以查看更多信息","帮助主题",JOptionPane.WARNING_MESSAGE);
		}
		else if(s.equals("关于计算器"))
		{
			System.out.println("系统管理员:用户按下了“关于计算器”菜单");
			JOptionPane.showMessageDialog(null,"Sqrt5制作,欢迎使用","关于计算器",JOptionPane.WARNING_MESSAGE);
		}
		else if(s.equals("开始计算"))
		{
			System.out.println("系统管理员:用户按下了“开始计算”按钮");
			String exp=txt.getText().trim();
			if(exp.compareTo("clear")==0)
			{
				txt.setText("");
				show.setText("");
				System.out.println("系统管理员:高级用户输入了clear命令");
				return;
			}
			if(exp.compareTo("help")==0)
			{
				txt.setText("");
				show.append("此程序为文本计算器,输入一串公式可以根据优先级、括号等顺序计算出结果,暂时只能支持\"+\"、\"-\"、\"*\"、\"/\"四种运算,能识别括号。\r\n");
				show.append("作者:\tSqrt5\r\n");
				show.append("E-mail:\t2.236068@gmail.com\r\n");
				show.append("此产品最终解释权为作者所有!\r\n");
				show.append("简单命令提示:\r\n");
				show.append("save->保存历史\t");show.append("clear->清空历史\r\n");
				show.append("help->帮助\t");show.append("shutdown->关闭文本计算器\r\n");
				System.out.println("系统管理员:高级用户输入了help命令");
				return;
			}
			if(exp.compareTo("save")==0)
			{
				System.out.println("系统管理员:高级用户输入了save命令");
				txt.setText("");
				try
				{
					FileWriter txtWriter=new FileWriter("History.txt");
					BufferedWriter writer=new BufferedWriter(txtWriter);		
					String S=show.getText();
					S="/*文本计算器*/\r\n/*制作人:Sqrt5*/\r\n/*欢迎交流使用!*/\r\n/*E-mail:2.236068@gmail.com*/\r\n/*这是文本计算器的保存文件,可以根据您的需要在这里面保存记录*/\r\n\r\n"+S;
					writer.write(S);
					writer.close();
					System.out.println("系统管理员:历史History.txt已经保存到CLASS文件根目录!");
					show.append("历史History.txt已经保存到CLASS文件根目录!\r\n");
					Runtime.getRuntime().exec("cmd /c start .\\");
				}catch(IOException ee){}
				return;
			}
			if(exp.compareTo("shutdown")==0)
			{
				System.out.println("系统管理员:高级用户输入了shutdown命令");
				System.exit(0);
			}
			
			for(int i=0;i<exp.length()-1;i++)
			{
				if(exp.charAt(i)=='('&&exp.charAt(i+1)==')')
				{
					txt.setText("");
					show.append("括号中没有内容!请重新输入!\r\n");
					System.out.println("系统管理员:括号中没有内容");
					return;
				}
			}
			int count=0;
			boolean isBlank=false;
			for(int i=0;i<exp.length();i++)
			{
					
				if(exp.charAt(i)=='(')count++;
				if(exp.charAt(i)==')')count--;
				if(exp.charAt(i)==' ')
				{
					count=1;
					isBlank=true;
				}
			}
			if(count!=0)
			{
				txt.setText("");
				if(isBlank)
				{
					show.append("公式中不能出现空格!请重新输入!\r\n");
					System.out.println("系统管理员:公式中出现了空格");
				}
				else
				{
					show.append("公式中左右括号数要相等!请重新输入!\r\n");
					System.out.println("系统管理员:公式中左右括号数不相等");
				}
				return;
			}
			int strLength[]=new int[1000];
			for(int i=0;i<100;i++)
			{
				for(int j=0;j<100;j++)
				{
					strAll[i][j]=null;
				}
			}
			String expBr;
			expBr=SeparateAllString("#"+exp+"#",strLength);
			SeparateString("#"+expBr+"#",strAll[99]);
			for(int k=0;k<100;k++)
			{
				if(strAll[99][k]==null)
				{
					strLength[99]=k;
					break;
				}
			}
			txt.setText(""); 
			if(exp.compareTo("")!=0)
			{	
				String stemp;
				stemp="";
				try
				{
					stemp=doubleTrans(CalculatorAlgorithm(strAll[99],strLength[99]));
				}
				catch(Exception err)
				{
					txt.setText("");
					show.append("公式输入错误!请重新输入!\r\n");
					System.out.println("系统管理员:公式输入错误");
					return;
				}
				if(stemp.compareTo("Infinity")==0)
				{
					stemp="+∞";
					show.append(exp+"="+stemp+"\r\n");
					System.out.println(exp+"="+stemp);
				}
				else if(stemp.compareTo("-Infinity")==0)
				{
					stemp="-∞";
					show.append(exp+"="+stemp+"\r\n");
					System.out.println(exp+"="+stemp);
				}
				else
				{
					show.append(exp+"="+stemp+"\r\n");
					System.out.println(exp+"="+stemp);
				}	
			}
			txt.requestFocus();
		}
	}
	String doubleTrans(double d)
	{
  		if(Math.round(d)-d==0)
  		{
			return String.valueOf((long)d);
		}
		return String.valueOf(d);
	}
	double CalculatorAlgorithm(String str[],int strLength) throws Exception
	{
		if(strLength==3)
		{
			double n;
			n=Double.parseDouble(str[1]);
			return n;
		}
		Stack stkNum=new Stack();
		Stack stkOp=new Stack();
		Stack stkNumTaken=new Stack();
		Stack stkOpTaken=new Stack();
		double operateNum1=0.0,operateNum2=0.0;
		int pOp=0,cOp=0;
		boolean LastFirst=false;
		String ptempOp,ctempOp;
		String FirstOp,EndOp;
		int pPriority=0,cPriority=0;
		for(int i=strLength-1;i>=0;i--)
		{
			if(str[i].charAt(str[i].length()-1)>='0'&&str[i].charAt(str[i].length()-1)<='9')
			{
				double n;
				n=Double.parseDouble(str[i]);
				stkNum.push(n);
			}
			else stkOp.push(str[i]+"");
		}
		FirstOp=(String)stkOp.pop();
		while(!stkOp.empty())
		{
			if(!stkOpTaken.empty()&&!LastFirst)
			{
				operateNum1=(Double)stkNumTaken.pop();
				ptempOp=(String)stkOpTaken.pop();
			}
			else
			{
				operateNum1=(Double)stkNum.pop();
				ptempOp=(String)stkOp.pop();
			}
			if(ptempOp.compareTo("+")==0)
			{
				pPriority=20;
				pOp=1;
			}
			else if(ptempOp.compareTo("-")==0)
			{
				pPriority=20;
				pOp=2;
			}
			else if(ptempOp.compareTo("*")==0)
			{
				pPriority=50;
				pOp=3;
			}
			else if(ptempOp.compareTo("/")==0)
			{
				pPriority=50;
				pOp=4;
			}
			else if(ptempOp.compareTo("#")==0)
			{
				pPriority=1;
				pOp=0;
			}
			if(!stkOpTaken.empty()&&!LastFirst)
			{
				operateNum2=(Double)stkNumTaken.pop();
				ctempOp=(String)stkOpTaken.pop();
			}
			else
			{
				operateNum2=(Double)stkNum.pop();
				ctempOp=(String)stkOp.pop();
				LastFirst=false;
			}
			if(ctempOp.compareTo("+")==0)
			{
				cPriority=20;
				cOp=1;
			}
			else if(ctempOp.compareTo("-")==0)
			{
				cPriority=20;
				cOp=2;
			}
			else if(ctempOp.compareTo("*")==0)
			{
				cPriority=50;
				cOp=3;
			}
			else if(ctempOp.compareTo("/")==0)
			{
				cPriority=50;
				cOp=4;
			}
			else if(ctempOp.compareTo("#")==0)
			{
				cPriority=1;
				cOp=0;
			}
			if(pPriority>=cPriority)
			{
				
				switch(pOp)
				{
				case 1:
					operateNum2=operateNum1+operateNum2;break;
				case 2:
					operateNum2=operateNum1-operateNum2;break;
				case 3:
					operateNum2=operateNum1*operateNum2;break;
				case 4:
					operateNum2=operateNum1/operateNum2;break;
				}
			}
			else
			{
				stkNumTaken.push(operateNum1);
				stkOpTaken.push(ptempOp+"");
				LastFirst=true;
			}
			stkNum.push(operateNum2);
			stkOp.push(ctempOp+"");
			if(stkOpTaken.empty()&&ctempOp.compareTo("#")==0)break;
		}
		double m=0.0;
		m=(Double)stkNum.pop();
		return m;	
	}
	void SeparateString(String s,String str[])
	{
		int i;
		int j;
		boolean bSNum;
		boolean bSOp;
		boolean bSLFunc;
		boolean bSRFunc;
		boolean bSBra;
		boolean bSNumF;
		boolean bSOpF;
		boolean bSLFuncF;
		boolean bSRFuncF;
		boolean bSBraF;
		boolean bSEnd;
		boolean bSEndF;
		str[0]=""+s.charAt(0);
		j=0;
		for(i=1;i<s.length();i++)
		{
			bSEndF=(s.charAt(i-1)=='#');
			bSEnd=(s.charAt(i)=='#');
			bSNumF=(s.charAt(i-1)>='0'&&s.charAt(i-1)<='9')||(s.charAt(i-1)=='.')||(s.charAt(i-1)=='-');
			bSNum=(s.charAt(i)>='0'&&s.charAt(i)<='9')||(s.charAt(i)=='.')||(s.charAt(i)=='-');
			bSOpF=((s.charAt(i-1)=='+')||(s.charAt(i-1)=='*')||(s.charAt(i-1)=='/'));
			bSOp=((s.charAt(i)=='+')||(s.charAt(i)=='*')||(s.charAt(i)=='/'));
			bSLFuncF=(s.charAt(i-1)>='a'&&s.charAt(i-1)<='z');
			bSLFunc=(s.charAt(i)>='a'&&s.charAt(i)<='z');
			bSRFuncF=((s.charAt(i-1)=='!'));
			bSRFunc=((s.charAt(i)=='!'));
			bSBraF=((s.charAt(i-1)=='(')||(s.charAt(i-1)==')'));
			bSBra=((s.charAt(i)=='(')||(s.charAt(i)==')'));
			if(bSNumF&&bSNum)
			{
				if(
					(s.charAt(i-1)>='0'&&s.charAt(i-1)<='9'||(s.charAt(i-1)=='.')||(s.charAt(i-1)=='-'))
					&&
					s.charAt(i)=='-'
					&&
					(s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'||(s.charAt(i+1)=='.')||(s.charAt(i+1)=='-'))
					)
					j++;
				if((s.charAt(i-2)>='0'&&s.charAt(i-2)<='9')&&s.charAt(i-1)=='-'&&(s.charAt(i)>='0'&&s.charAt(i)<='9'))
					j++;
			}
			else if(bSOpF&&bSOp){}
			else if(bSLFuncF&&bSLFunc){}
			else if(bSRFuncF&&bSRFunc){}
			else if(bSBraF&&bSBra){}
			else if(bSEndF&&bSEnd){}
			else j++;
			if(str[j]!=null)str[j]=str[j]+s.charAt(i);
			else str[j]=""+s.charAt(i);
		}
	}
	String SeparateAllString(String s,int strLength[])
	{
		String str[]=new String[1000];
		Stack stkString=new Stack();
		Stack stkStringTaken=new Stack();
		int i=1;
		int count=1;
		while(s.charAt(i)!='#')
		{
			stkString.push(s.charAt(i));
			i++;
		}
		i=0;
		while(count!=0)
		{
			count=0;
			while(!stkString.empty())
			{
				
				char temp;
				
				temp=(Character)stkString.pop();
				stkStringTaken.push(temp);
				if(temp==')')count++;
				if(temp=='(')
				{
					count--;
					stkStringTaken.pop();
					while((Character)stkStringTaken.peek()!=')')
					{
						if(str[i]!=null)str[i]=str[i]+(Character)stkStringTaken.pop();
						else str[i]=""+(Character)stkStringTaken.pop();
					}
					
					stkStringTaken.pop();
					SeparateString("#"+str[i]+"#",strAll[i]);	
					for(int j=0;j<100;j++)
					{
						if(strAll[i][j]==null)
						{
							strLength[i]=j;
							break;
						}
					}
					String swap;
					swap="";
					try
					{
						swap=""+CalculatorAlgorithm(strAll[i],strLength[i]);
					}
					catch(Exception err)
					{
						txt.setText("");
						show.append("不可预知错误!请重新输入!\r\n");
						System.out.println("系统管理员:不可预知错误");
						return "0";
					}
					for(int iii=swap.length()-1;iii>=0;iii--)
						stkStringTaken.push(swap.charAt(iii));
					i++;
				}
			}
			while(!stkString.empty())stkString.pop();
			while(!stkStringTaken.empty())
			{
				char swap;
				swap=(Character)stkStringTaken.pop();
				if(swap=='('&&swap==')')count++;
				stkString.push(swap);
			}
		}
		s="";
		while(!stkString.empty())
			s=(Character)stkString.pop()+s;
		return s;
	}
	public static void main(String[] args)
	{
		new TxtCalculator();
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
傲游3浏览器是国内唯一具有独立内核的桌面浏览器产品,首创双核浏览模式,在安全、快速的基础上,保证了对网银、网购类网站的兼容性。傲游3浏览器内置云端广告过滤系统,强大而易用,确保用户在浏览网页不受任何广告的骚扰。 傲游3浏览器界面简洁美观,布局合理。傲游3功能丰富,拥有在线收藏、鼠标手势、广告过滤、智能地址栏、多重搜索、页面截图、即翻译等数十种实用功能,并且独有"快应用"、"团购指数"等创新性功能,充分让用户体验到基于新式浏览器的一站式互联网服务的魅力。 北京傲游(Maxthon)天下科技有限公司是一家国际化科研企业,在硅谷、香港等地设立有分公司。傲游旨在通过浏览器向用户提供全面的一站式互联网服务,产品覆盖桌面、手机、平板、机顶盒等平台,在全球范围内拥有几千万活跃用户。傲游致力于技术研发,于2009年10月28日在北京成立国内最大的专业浏览器研发中心,并在2010年8月份发布了国内首个独立核心浏览器产品:傲游3。目前傲游浏览器产品语言版本多达37种,遍布120个国家和地区,是国产软件走向世界的排头兵。 傲游浏览器3.1.8.1000 本次更新包含的新特性有: + 用户选择 "使用鼠标右键关闭标签" 后, 可以按住 Shift 在标签上点击右键打开标签内容菜单. 本次更新优化了下列功能: * 大幅增强极速核心的网页兼容性. 本次更新解决了如下问题: [主框架] * 解决同按下 Alt + Ctrl + ESC , 浏览器失去响应的问题. * 重置所有选项后, 快速保存图片的路径会消失. * 已锁定的标签会干扰关闭全部标签的动作, 使其左侧的标签无法被关闭. * 调整侧边栏大小会使侧边栏失去焦点. [Webkit 核心] * 拖动某些网页中的图片会弹出下载. * 在网页内的文本框中选择文本, 鼠标右键菜单中没有 "粘贴" 项目. [用户界面] * 某些情况下, 取消 "后台标签显示关闭按钮" 后, 按钮依旧会显示, 切换标签后消失. * 在资源嗅探器中, 资源URL过长, Tooltip 会出现滚动条. * 自定义界面的设置无法对新建的窗口生效. [智能地址栏] * 无论如何设置, 从地址栏打开的网页总会激活新标签. [智能填表] * 在输入框下拉菜单选择通用填表项, 输入框会失去焦点. [迅雷下载模块] * 在英文系统下, 第一次启动傲游迅雷加速下载语言显示不正确. * 关闭浏览器迅雷下载模块可能会崩溃. 傲游浏览器3.1.7.1000 本次更新包含如下新特性: + 支持HTML5特性: Skydrive 直接拖拽添加上传文件, Gmail/163等邮件直接拖拽添加附件. 本次更新优化了下列功能: * 优化数据同步逻辑. * 优化内核启动速度. * 傲游迅雷加速下载使用新界面. 本次更新解决的问题如下: [主框架] * 没有启用老板键, 点击任务栏托盘区的图标无效. * 某些情况下会出现无效的浏览历史条目. * 非自动登录情况下自定义界面设置无法保存. [Webkit 核心] * 运行迅雷, 有道词典或灵格斯划词翻译, 浏览器可能会失去响应. * 解决一些核心崩溃的问题. * 增强核心兼容性. * 选中一段图文混排的文字, 在图片上点击鼠标右键的候, 不会出现 "复制" 项目. [Trident 核心] * 兼容模式 window.open 未利用空白页. [用户界面] * 解决某种情况下侧边栏显示错误的问题. * 嗅探器的选择框在没有嗅探到内容的情况下, 勾选后无法取消. * 解决一些傲游迅雷加速下载的界面和语言问题. [侧边栏] * 浏览器登录, 会重置侧边栏微博扩展的登录状态. [下载] * 傲游迅雷加速下载可能出现高资源占用率. * 增强傲游迅雷加速下载文件的兼容性. [资源嗅探器] * 批量下载显示错乱. [开发者工具] * 在网页中开启审查元素, 使用鼠标右键菜单保存图片, 会保存为 HTML 文件. 傲游浏览器3.1.6 正式版 3.1.6.1000 2011-08-25 本次更新包括下列优化: * 优化浏览器启动速度. * 优化页面 gif 动画播放效率. 本次更新对修复了以下问题: [Webkit 核心] * 解决一些页面兼容性问题. * 解决一些崩溃问题. * 从 WebSite-Watcher 调用傲游3, 打开保存在本地的网页会出现 404 错误. * 对特殊字符转码问题会导致页面出现 404 错误. * 个别用户的图片另存为对话框无法弹出. * 在 Google+ 页面点击 "Start a Hangout" 后, 弹出 C++ Runtime 错误. * 点击 Facebook 连接提示登录. [主框架] * 解决部分系统中浏览器无法启动的问题. * 非自动登录浏览器帐号的情况下, 浏览器的侧边栏状态无法保存. * 用任务栏图标切换到傲游 3 窗口会出现焦点问题. [用户界面] * 使用数字键盘快捷键缩放网页, 状态栏的缩放按钮显示数值不会变化. [收藏] * 在收藏栏中的 "更多收藏" 中, 进行快捷组和文件夹的转换会有延迟. * 某些情况下收藏栏文件夹的鼠标右键菜单会出现闪烁. [下载] * 极速模式直接打开某些 FTP 下载链接, 会提示无法连接到网站. [资源嗅探器] * 有修改语言会导致嗅探器中的资源列表消失. [数据同步] * 不编辑过滤规则点击 "应用" , 会错误的进行同步. [阅读模式] * 已经隐藏的工具条仍然响应鼠标事件. * 增强阅读模式兼容性. * 某些情况下页面不响应鼠标动作. 傲游浏览器3.1.5 正式版 + 加入我的魔盒(即外部工具), 入口位于快速工具栏, 用户可以从魔盒中快速调用计算器, 画图等系统工具, 还可以加入自定义的工具. + 工具栏及侧边栏支持通过鼠标拖拽调整顺序. + 拼写检查支持10种语言, 中文版不包含此功能. + 中文侧边栏加入新浪微博扩展. + 加入恶意网址拦截计数, 傲游刻确保用户的网络浏览安全. * 优化标签切换性能. * 优化极速模式内存占用 * 滚动条体验增强 * 为截图工具条添加了拖拽手柄. 傲游浏览器3.1.4 正式版 启用全新设计的快速访问, 用户可以自定义背景图, 可定义最多9页快速访问内容。 添加了打印预览功能。 标签自动刷新可以指定间。 超级截图现在能够识别窗体 添加一款标签下置皮肤, 基于现代风格定制。 3.1.3.2000 2011-07-14 本次更新解决了以下问题 主框架 设置stunnel类型的代理后, 记事本不能同步. Webkit 核心 使用鼠标右键菜单中的复制在网页上复制文字的候, 粘贴到记事本中会丢失换行符. 收藏 从收藏栏一次性打开某文件夹下所有收藏项目,标签的顺序与收藏的顺序相反. 傲游浏览器3.1.3 正式版 [阅读模式] 可以使用左右方向键进行翻页, 使用上下方向键进行滚屏. [超级截图] 为气泡添加了白色背景. 文字框可以拖动. 放大镜坐标改成截图尺寸. 傲游3.1.2.1000正式版重要更新: 英文拼写检查 英文拼写检查可以在你输入过程中提示可能有错误的英文单词, 用红色波浪线进行标注, 在标注上点击鼠标右键可以看到词库的拼写建议. 当然你也可以把自造词或者词库中没有的单词加入词库 最易用的广告过滤规则分享与安装 通过广告过滤规则分享功能,用户可以轻松分享自己独有的广告过滤规则。过滤规则的安装方式也大幅简化,用户只需复制规则,傲游3浏览器即可自动判断,并且进行安装。 历史日历 按Ctrl+H,可以打开傲游3的历史,本次更新在历史中添加了历史日历功能,通过此功能可以直接转跳到特定的日期的历史。日历格式与普通日历一致,以月为单位,便于用户查找、定位。 自动刷新 在标签上点击右键,即可设置自动刷新选项,刷新间隔为5秒、10秒、30秒三个档次。自动刷新功能可以保持网页在最新状态,以便用户随查询。 3.1.1.600_Beta本次更新加入的特性有: Webkit核心 加入英文拼写检查功能,支持通过鼠标右键菜单添加用户词典. 标签 标签的右键菜单加入了"自动刷新"功能. 侧边栏 中文版侧边栏加入游戏及团购的快速入口. 侧边栏使用扩展方式实现,高级用户可以通过"%appdata%\Maxthon3\Addons\"下的扩展包,自定义侧边栏按钮以及内容. 历史管理器 加入日历视图 广告过滤 加入广告过滤的分享及自动安装功能 本次更新包括以下功能优化: 同步 同步中心支持是否启用收藏同步 团购点评 团购点评图标更新,显示评论数. Flash 内建Flash插件更新至10.3.181.26 本次更新解决了下列问题: 主框架 修正设置快速保存目录可能会出现的程序崩溃. 切换代理后不会立即生效. WindowsXP系统下,使用IE6核心,淘宝商城订单页面自动跳转为兼容模式,会显示"无法购买". 解决在部分团购网站无法顺利支付的问题. 解决拍拍网使用中信银行无法顺利支付的问题. 安全 修正WebkitBugzilla52688安全问题. Webkit核心 解决一个历史文件导致登录崩溃的问题. 在某些网站密码框中无法正确屏蔽密码. 在Facebook点击图片或视频进入影院模式,点击关闭按钮后浏览器显示的页面不正常. Facebook照片关闭,会回到个人主页. 点击某些网页上的连接,地址栏不会改变. 无法在某些Flash中输入中文. 某些网页会无故跳转到手机版. Trident核心 某些网页上的操作会导致无故多开一个页面. 用户界面 WindowsXP系统下启动浏览器侧边栏显示异常. 选项 不自动登录账户的情况下,登录账户后,"只允许打开一个浏览器窗口"选项不起作用 智能地址栏 输入法上屏的字母地址栏不会自动补全. 下载 下载意外断开后,恢复下载会出现问题. 下载路径异常可能会建立一个无法正常删除的文件夹. http://bbs.maxthon.cn/viewthread.php?tid=507136 开发者工具 在www.yahoo.com中使用审查元素,首次总是定位在标签上. 有首次点击审查元素无法定位. 傲游浏览器3.1.1 正式版 Webkit 升级至 534.12 , 综合性能提升 32.6% JavaScript 引擎升级综合性能提升20%. 加入团购点评功能, 傲游团购点评网站同步上线 http://tuan.maxthon.cn/dianping/ 加入同步中心 加入团购点评功能, 傲游团购点评网站同步上线 http://tuan.maxthon.cn/dianping/ 加入同步中心 支持皮肤文件(*.mxskin)关联, 加入皮肤管理器 自动订阅常用网站过滤规则及全局规则 大幅优化了浏览器的性能与稳定性 傲游浏览器3.0.24.1000 正式版 在菜单>>视图>>自定义界面中加入"工具按钮"项目 在多重搜索中加入比价搜索 加入快递查询功能 现在点击"打开", 目标将会被存入临目录 增加是否启用多窗口的选项 支持查看 cookie 扩充了安全网址认证库 优化标签打开、切换、关闭性能 增强了收藏同步协议, 支持了更多的网络环境 支持填表和保存表单的快捷键、鼠标手势自定义 右键"目标另存为"对话框采用系统风格

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值