Sun近日发布了其RIA手艺JavaFX的RAD(快速应用开发)工具的体验版,这是一个针对开发人员的JavaFX开发工具。该工具今朝已可以在NetBeans 6.8更新中心下载。因为是早期版本,该工具还有一些功能限制,好比:对于JavaFX 1.2中新增的关头组件,如图表(Chart),尚无可视化撑持;还不能对组件的某些属性进行可视化编纂;此外,预览视图偶然会“罢工”以至于必需重启IDE才能恢复正常等。 Sun的开发工具工程部门的负责人David Folk在一个年夜会上说:“我们甚至不称之为试用版(beta)——而称之为‘早期体验版’,或者‘预览版’”,该工具的真正目的是让你能用JavaFX开发基于表单的应用轨范”& C3 l! \& O o1 w* G$ f
这款新的JavaFX工具的根基思惟近似于针对Swing的Matisse项目,它供给了与VB或Delphi很是相像的可视化编纂器,简化了 Swing的开发工作。与Matisse一样(它后来酿成了NetBeans 5的GUI编纂器),JavaFX工作台在你工作时为你生成代码,而且,尽管你可以查看生成的代码,但不爽的是你不能对其出产的代码进行改削。
0 S- O3 y% R. G- z 当你年夜调色板(palette)中拖拽一个JavaFX组件到设计区时,你可觉得它们绑定数据源。该插件今朝撑持JDBC数据源、HTTP (XML / JSON)、文件系统(FileSystem)、文件数据源以及内建过滤器。它还供给一些简单的转换器,经由过程他们你可以便利地将某数据源(好比REST或 JSON数据源)绑定到一组组件上。) A, E) @( ?/ Z8 Q, o! a
除了撑削发单地拖放组件的功能外,该插件还有一个“状况”的概念。状况年夜最初的主状况(master state)起头,你还可以给这些组件或他们的结构增添新状况。应用运行时,好比鼠标点击的事务就可以激发状况转换,进而把你界说的行为自动纺暌钩在UI 上。每个转换还上还能附带一个简单的动画,这样,你就能快速建树缩放,渐变和扭转等特效。
! [- h$ Z+ [- S& |( V! Y4 G" g 该工具还有良多其他有价值的特征,如概览(经由过程它你可以在分歧的屏幕尺度上预览应用,如同在分歧的设备上一样,如桌面,移动设备和HDTV等) 以及预界说模板。操作模块你可以快速构建通俗的GUI模式,好比向导按钮(打消、猬缩后退、下一步和竣事等)以及索引按钮(前一步,下一步)。你可以便捷地添加这些按钮并进行客户化。
( J+ G/ l) U+ f( ]! E4 j8 ^- p 与众多必需的工具一样,JavaFX需要经由过程一些瞩目的应用才能获得更多的订单。早期考试考试它的公司有Ubivent,它的整个虚拟事务平台是完全基于JavaFX构建的。此外还有WhitStone Technology,他们在颇整体处事平台和IT处事打点产物的工作流组件中使用了JavaFX。然而,对于JavaFX来说最主要的浪子也许就是 2010冬季奥运会,它的组织委员会是Sun的年夜客户,它在其网站上使用了基于JavaFX的金牌展收用。 a, ~7 C7 J2 j5 s1 |
3 p# i i4 W( J! m4 M# c</p> //获得输入流0 H1 ]) T K$ H% }# @4 a( R
InputStream input = httpConnection.getInputStream();
& ?5 z/ t! |/ n* o3 C 年夜输入流中掏出的字节约就是down.zip文件年夜2000070起头的字节约。
" d8 \4 i1 X( l: C 巨匠看,其实断点续传用Java实现起来仍是很简单的吧。2 m. o7 P! ~ a" L7 L/ y8 W
接下来要做的事就是怎么保留获得的流到文件中去了。, f3 A+ K8 V0 p: ?
保留文件采用的体例。! }3 K; o6 h7 ~1 C3 g0 c" S
我采用的是IO包中的RandAccessFile类。) Y5 s1 ]( n5 Y; I/ c! R. x
操作相当简单,假设年夜2000070处起头保留文件,代码如下:
+ J8 B2 x4 P. x# a1 n% t RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
- s7 F* u. k5 b `. j long nPos = 2000070;5 t4 T9 D$ V" C5 `% i
//定位文件指针到nPos位置
( I* Q& `* L* W3 J( X7 A oSavedFile.seek(nPos);8 W. n. x, e9 s
byte[] b = new byte[1024];" J9 @2 Y" S' m: s
int nRead;
7 {9 \+ I& {: N //年夜输入流中读入字节约,然后写到文件中
7 Z* [ v; j x# @& x- N while((nRead=input.read(b,0,1024)) > 0)
1 x( i" x; H5 X# e! @, u7 Q" k {
) }( d4 ]8 U! V; E# [( n oSavedFile.write(b,0,nRead);. `$ U% b$ }& f( z
}9 Q' R; w7 z8 G3 [+ D2 ~
怎么样,也很简单吧。1 K5 J0 O3 A/ |
接下来要做的就是整合成一个完整的轨范了。搜罗一系列的线程节制等等。# F5 R- z8 H% ^9 \6 C
(三)断点续传内核的实现
1 R& G/ p& a7 b1 l8 e' z1 q: y 首要用了6个类,搜罗一个测试类。5 i1 P$ s7 X9 z0 ]1 y& k' F
SiteFileFetch.java负责整个文件的抓取,节制内部线程(FileSplitterFetch类)。
X) e# \0 R; d: X FileSplitterFetch.java负责部门文件的抓取。' L6 |& w S' F; J3 U l J
FileAccess.java负责文件的存储。( O- Q5 [! q& j2 u
SiteInfoBean.java要抓取的文件的信息,如文件保留的目录,名字,抓取文件的URL等。* h* L0 B K; x! A7 s. J8 o9 B; p
Utility.java工具类,放一些简单的体例。4 [: {8 E! R1 u2 @4 F6 z
TestMethod.java测试类。
8 j" Z& j7 L/ T6 \4 c0 h 下面是源轨范:
: y/ C' u+ @* {3 G /*
8 Q! x( x+ N: ~ **SiteFileFetch.java: i: T: z: M: f7 o4 C
*/
, P8 E: \% x3 u* x2 L package NetFox;( x0 w3 L) K: B( G/ W2 x7 ?( y
import java.io.*;
; C1 ~5 A k4 G import java.net.*;
- f5 J% e, y: U' i2 {' }0 U, e. m public class SiteFileFetch extends Thread {" d- I" o* E8 P( T. E: }
SiteInfoBean siteInfoBean = null; //文件信息Bean
: d2 k/ @4 U# `& B' z# {' o long[] nStartPos; //起头位置
+ g9 j6 K" t, y$ w, B( n- d long[] nEndPos; //竣事位置0 L8 P) o4 G# E5 O# F ^
FileSplitterFetch[] fileSplitterFetch; //子线程对象
. C1 Q7 U; |0 A; D- P) V# l long nFileLength; //文件长度
7 {. ?$ A: w7 W. b* u boolean bFirst = true; //是否第一次取文件
9 f% f; T" I4 R! a K( O boolean bStop = false; //遏制标识表记标帜 |