
Java语言中的Applet(Java小程序)和Application(Java应用程序)是在结构和功能上都存在很大差异的两种不同的编程方式 Applet应用于Web页上 可做出多姿多彩的页面特效 给网站增辉添色 Application则与其他编程语言(如VB VC)一样 可编制各种应用程序 本文要讨论的是第一种情况 在Web页上用Java Applet绘制K线图 K线是股市行情分析中的一种参数指标 用股票每日的开盘价 最高价 最低价 收盘价及成交量等数据进行作图 配合五日 十日均线便可反映出一个阶段内该支股票的涨跌走势 Java Applet所做的K线图多应用于证券类型的网站 以方便网上股民的分析 *** 作 不过由于我国网速的关系 目前有些证券类网站把K线图做成了以节省下载的时间 当然 其绘制K线所用的工具(Java Applet)及绘制方法还是相同的 在编写绘制K线的Java Applet时 有几处关键问题要解决 即 )多线程的使用 )布局管理器的选择 )数据输入 输出流的应用 )设置 监听鼠标与键盘事件 下面通过一个实例 来详细阐述整个编程过程和方法 《查看演示》 一 使用多线程 一个完整的Java Applet包含四个方法 Init() Start() Stop() Destroy()(即 初始化 开始 停止 清除) 构成一个完整的生命周期 其运行次序也是由上而下顺序执行 在绘制K线图的过程中 除了要绘制窗体及代表股票升降的阴线 阳线矩形外 还要监听鼠标事件并同时绘制一个自由移动的 十字 游标 来定位显示所检索股票每日的各种价格数值(如开盘价 收盘价等) 这时 为了避免闪烁和减少重新计算的等待时间 除了重绘跟随鼠标移动的 十字 游标外 对页面的布局及阴线 阳线矩形等不进行重绘 这就需要应用多线程来完成该项任务 .关于多线程的一些基本概念 多线程实际上就是启动另一个进程 其运行的过程独立于主程序之外 并从主程序的Start()方法载入 由Run()方法调用执行 实现多线程的方法有两种 即 创建Thread类的子类(类的继承)和实现runnable接口 为便于使用 Java把所有有关线程的功能封装成Java类库中的一个类 Java lang Thread 通过这个类 Java可以创建 控制和终止线程 完成有关多线程的所有 *** 作 在Java语言中 一个子类只能继承一个超类(父类) 由于我们所要编写的Java Applet是应用于网页中的 首先必须继承浏览器类(java applet) 因此 在本例中我们通过实现runnable接口的方法来实现多线程 实现的语句如下 public class StockApplet extends java applet Applet implements Runnable .多线程的应用 首先 在Init()方法中对要创建的线程(M_pointThread)进行定义及初始化 Thread M_pointThread=null;然后 在Start()和Stop()方法中加入以下代码 //当打开浏览器页面开始载入Java Applet代码时 执行start()方法 public void start() {if (M_pointThread==null) //如果线程尚未产生{M_pointThread=new Thread(this); //则创建一个新线程M_pointThread start(); //启动该线程}}//在当前页面关闭或转向其他Web页面时 调用stop()方法 以释放系统资源public void stop(){if (M_pointThread!=null) //如果线程尚在运行{ M_pointThread stop(); //停止该线程 M_pointThread=null; //释放线程所占资源}} .编写线程运行的代码 public void run(){M_graphics=getGraphics();M_graphics setXORMode(Color white); //采用异或方法绘制 十字 游标while(true) { try {if(MouseMove==true) //侦测到鼠标的移动后 执行以下代码{ //当鼠标位于以下区域(Java Applet布局)内时 执行画线 *** 作 if(x > && x < ){M_graphics drawLine(x x );} if(y > && y < ){M_graphics drawLine( y y );} if(X > && X< ){M_graphics drawLine(X X );} if(Y > && Y< ){M_graphics drawLine( Y Y);} MouseMove=fase; x =X; //传递当前座标参数 y =Y; }}catch(NullPointerException npe){} //捕获可能出现的异常 }二 布局管理器 本例中的Java Applet运行时 要在页面上Java Applet的运行区域内绘制相应的 标签 来显示不同的数值 并要加入一个 文本框 来接收输入的股票代码 对这些 标签 和 文本框 位置及大小的设定 便属于布局管理的应用范畴 Java语言中提供的布局管理器种类有 边界式布局 卡片式布局 流式布局和网格式布局等 各有不同的特点 可根据实际需要选用 但有最大自由设计空间的是 无布局管理器 ——即不使用任何布局格式 而通过手工方式添加组件到页面布局的绝对位置上 本例中使用的便是 无布局管理器 在使用 无布局管理器 时 首先要作出声明 即 setLayout(null);然后用reshape()方法指定组件的具 置和尺寸 基本语句如下所示 Label label =new Label(); //定义标签this add(label ); //把标签加入布局管理器label reshape( ); //在指定位置绘制标签对于多个标签和文本框 参照此格式添加即可 三 输入 输出数据流 Java Applet在客户端浏览器上运行时 要从服务器端读取股票的相关数据进行做图 这就涉及到Java数据流的运用 Java io包提供了多个用于与各种I/O设备交换信息的类 其最顶层的两个类便是输入流类(InputStream)和输出流类(OutputStream) 为了便于实现 在本例中我们先在服务器端把股票数据库(如 show dbf)中的有关字段写入一文本文件中(其格式为 第一行为股票的汉字名称 以后每一行内包括 开盘日期 开盘价 最高价 最低价 收盘价 成交量) 并以该支股票的代码作为文件名(如 txt) 然后 再用Java Applet从服务器端的文本文件中读取数据 这样 就把对服务器端数据库的访问转化为对文件的I/O *** 作 实现的语句如下 URL urlc=new URL( +FileName+ txt ); BufferedReader bis=new BufferedReader(new InputStreamReader(urlc openStream()));注 第一条语句中的为在本机执行调试 *** 作的URL地址 在上传到服务器上后要做相应的修改 FileName为要读取的文本文件名 第二条语句定义了读取输入数据流的方法 四 监听键盘及鼠标事件 在Java Applet小程序中 单击按钮 键入文本 使用鼠标或执行任何与界面相关的动作时 就发生一个事件 小程序就会作出适当的反应 在本例中 我们通过使用action()方法来获得Java Applet小程序运行时所发生的事件 语句格式如下 public boolean action(Event evt Object arg){FileName=text getText(); //提取文本框中输入的参数ReadData();//调用读数据流数据的方法return true; //处理完毕 不需要其他方法再做处理}上面的action()方法中含有两个参数 一个是Event类的一个对象evt 另一个是Object类的一个对象arg Event对象告诉我们发生了哪种事件 而Object对象将进一步告诉我们有关该事件的情况 每当有Event监听的事件发生时 Java Applet便自动调用该action()方法 至此 在掌握了上述编程中的一些要点后 我们便可以成功地编制出一个完整的绘制K线的Java Applet小程序了(完整的源代码下载) 五 编制HTML文档(l) 程序编制完成后 另外要做的是设置在Web页面上调用Java Applet的页面 即编制HTML文档 l文档的示例代码如下 < HEAD >< TITLE >股票K线图< /TITLE >< /HEAD >< /body >< /HTML >在< APPLET >< /APPLET >标签对内 是对Java Applet小程序的调用代码 其中的StockApplet class是经编译后生成的class文件 codeBase指向的是class文件所存放的路径 如果class文件与HTML文档存放在同一目录下 则可以省略这一项 至此 编制Java Applet小程序的工作便全部完成 在个人计算机上进行调试时 首先要安装个人Web服务 然后 把StockApplet class与HTML文档一起拷贝到本机的>
这个问题从根本上来说是系统计算资源不足导致的,难于解决。
我们可以考虑解决的方向:
1 最简单的,换上更好的硬件,但要花钱;
2 其次,可以在服务器限制一次并发访问的数量,这样也能解决,但会导致一部分用户体验下降;
3 再次,仔细的分析后台代码,找出瓶颈所在,并通过优化算法等改进性能,但耗时最久,并且也不一定能最终解决。
有些人问,开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:
上面说的爬虫,基本可以分3类:
1分布式爬虫:Nutch
2JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
3 非JAVA单机爬虫:scrapy
第一类:分布式爬虫
爬虫使用分布式,主要是解决两个问题:
1)海量URL管理
2)网速
现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:
1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。
2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。
3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。
4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。
6)Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch221,但是这个版本绑定了gora-03。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用090版本左右的hbase,相应的就要将hadoop版本降到hadoop 02左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1x和Nutch2x,这个Nutch2x上写的是可以支持到hbase 094。但是实际上,这个Nutch2x的意思是Nutch23之前、Nutch221之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1x是一个非常好的选择。Nutch1x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch23发布再看。目前的Nutch2是一个非常不稳定的版本。
进入对Java官网。
进去以后点击下载。
找到左边的灰框框,找到脱机安装。
点击脱机安装程序。
进去以后点击下载。
如果网速不好结束下载任务再下载一遍,直到网速好为止。
我下载用了一分钟。安装用了一分钟。
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈!!!!!!!!!!!!!!!!
1java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应 *** 作而C++编译的时候将程序编译成本地机器码一般来说java程序执行速度要比C++慢10-30倍即使采用just-in-time compiling (读取类文件字节后,编译成本地机器码)技术,速度也要比C++慢好多
2java的垃圾回收机制较C++由程序员管理内存效率更低
3java程序有要从网络上加载类字节,然后执行,这也是导致java运行速度慢的原因
4在程序运行过程中,java虚拟机要检测数组是否越界,在C++中则不检测
如果这些原因都不是的话,那就自己去ITjob网上看吧,这些也是复制过来的。
出现”您的网速过慢或浏览器禁用了JavaScript,请检查网速或浏览器设置后刷新页面“这个提示,说明JavaScript被禁用了,设置启用就可以恢复正常,方法如下:
1、打开IE;
2、浏览器工具->internet选项->高级,涉及java script全部勾选启用,完成。
以上就是关于怎么样提高网速全部的内容,包括:怎么样提高网速、怎样提高浏览器上网速度、用Java绘制K线图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)