??xml version="1.0" encoding="utf-8" standalone="yes"?> 前几天,到校内玩下开发者,体验下现在户互联|上最新的开攑^台。因此自己搞个可以在互联|上体验UCWEB的插件?/p>
不过插g很简单只是个引用而已 各位老大有兴也可以体验下啊?/p>
安装地址 http://apps.xiaonei.com/goucweb
]]>
I间Q?a href="htt://wuhua.3geye.net" target="_blank" title="htt://wuhua.3geye.net">htt://wuhua.3geye.net
转蝲请保留上面的信息Q请重知识产品Q谢?
EasyMF 易J2ME开发框?
目标Q?设计一个简单,E_Q可快速开发的J2ME开发框架?
一.说明Q?
?EasyMF 能做什?
作者:(x)wuhua
I间Q?a href="htt://wuhua.3geye.net" target="_blank">htt://wuhua.3geye.net
转蝲请保留上面的信息Q请重知识产品Q谢?/p>
EasyMF 易J2ME开发框?br />
EasyMF --- Easy Mobile Framework
目标Q?设计一个简单,E_Q可快速开发的J2ME开发框架?br />
一.说明Q?br />
此框架的意图是解xY件开发中帔R刎ͼq且可以通用话的问题?br />
旨在提高无线应用E序的开发效?br />
?EasyMF 能做什?br />
1.化UI设计
2.RMS的简化操?br />
3.单的日志框架
4.单的联网框架
5.通用工具的设?br />
6.一些图形相关的Ҏ(gu)
?EasyMF 的功能列?br />
1.UI 框架
2.日志框架
3.RMS框架
4.通用工具框架
5.囑Ş相关
6.一堆有用的DEMO
?EasyMF 的设计原?br />
1.UI的设计原?br />
UI是所有应用程序的核心?q些核心在PC上的变动性比较固定,而由于手机屏q,
q算能力 {差异,?x)导致设计一个手Y件大部分旉都花在UI层的设计上,业务
逻辑层往往比较?yu),q也是80/20原则吧?br />
如果有一个可以组装的UI的出玎ͼ大大减应用程序的开发时_(d)而EasyMF UI
层就是ؓ(f)了这个而设计的?br />
2.日志框架设计成尽量的单,q且有效的记录下用户想需要记录的日志
3.联网框架Q简化Http的联|,q十分的W合中国|络环境的东ѝ?br />
4.工具集合
5.囑Ş囄处理
6.RMS的简易操?br />
上面是基本结?br />
源代?http://code.google.com/p/easymf/
记得以前看过一高手写的文章?/p>
http://www.cnblogs.com/zhengyun_ustc/archive/2006/03/28/j2me_streaming_demo.html
q种思想需要用C个线E去控制视频的播放,感觉思\是好的,不过比较复杂?/p>
上个C拜我结合了上面高手的思\Q自己ȝ了另外一直播攄方式?那就是队列的方式?/p>
我们可以采用一些元数据的描q方式。来指导媒体播放cdQ播攑车,已经播放路径Q播N列的。我们的E序只需要解释下q个元数据,q且按照q种元素局的格式来获取媒体播放队列Q最后采用一个线E构造播N列的方式q行播放?/p>
下面看看我是怎么hq这些数据的
<root name="wuhua">
<li url="/video.xml">MTV</li>
<li url="/music.xml">MUSIC</li>
</root>
上面的是一些xml播放列表描述文g?/p>
q段是指定一些参C?qing)一些媒体编码。跟播放队列?/p>
<video name="信乐?-L" desc="about" encode="audio/x-wav" >
<item>/0.wav</item>
<item>/1.wav</item>
<item>/2.wav</item>
<item>/3.wav</item>
<item>/4.wav</item>
<item>/5.wav</item>
<item>/6.wav</item>
<item>/7.wav</item>
<item>/8.wav</item>
<item>/9.wav</item>
<item>/10.wav</item>
<item>/11.wav</item>
<item>/12.wav</item>
<item>/13.wav</item>
<item>/14.wav</item>
<item>/15.wav</item>
<item>/16.wav</item>
<item>/17.wav</item>
<item>/18.wav</item>
<item>/19.wav</item>
<item>/20.wav</item>
<item>/21.wav</item>
<item>/22.wav</item>
</video>
q是一部小?sh)媄的播N?/p>
<video name="一部很单的?sh)? desc="about" encode="video/mpeg" >
<item>/0.mpg</item>
<item>/1.mpg</item>
<item>/2.mpg</item>
<item>/3.mpg</item>
<item>/4.mpg</item>
<item>/5.mpg</item>
<item>/6.mpg</item>
<item>/7.mpg</item>
<item>/8.mpg</item>
<item>/9.mpg</item>
<item>/10.mpg</item>
<item>/11.mpg</item>
<item>/12.mpg</item>
<item>/13.mpg</item>
<item>/14.mpg</item>
<item>/15.mpg</item>
</video>
我基本已l实C上面的流媒体播放方式Q不q在试的过E中发现在播N频,或者视频设备的时候,感觉?/p>
两个Player之间切换有点卡,大概卡那?.1U。暂时还没有惛_解决办法?
有好东西需要跟大家分n。你有好思\吗,大家分n下吧?/p>
PSQ?实现上面的流媒体Ҏ(gu)Q采用了EasyMF 框架
q??W???????所 q???q????????????,???一 ?q??W?(?++?br />
-),??q??W?(?+?Q????q??W?(??:),???????一 ????????????br />
?一 ?q??W???,????~ ???(?++i )??~ ???(?i++),????q??W????br />
???~ ???(?a+b)???q??W?????,???q??W?????c?:
1.??q??W?(+,-,*,/,%,++,--)
2.?p?q??W?(Q?Q?Q?,Q?,==,!=)
3.????q??W?(!,&&,||)
4.?q??W?(Q>,Q<,Q>Q?&,|,^,?)
5.??q??W?(=,??????q??W??+=)
6.??q??W?( ?:)
7.??(????q??W?? ,??q??W?[],??q??W?instanc eof,????q??W?new,??c?br />
???q??W?(c??),????q??W?() {?)
????????q??6c?q??W??br />
§ 3.1??q??W?br />
??q??W????????????,????q???br />
一 ?????q??W?,???所 C?br />
q算W?用法 描述
+ op1+op2 ?br />
- op1-op2 ?br />
* op1*op2 ?br />
/ op1/op2 ?br />
% op1%op2 取模(求余)
Java??q??W?q?????,????q???W???q??,?"abc"+"de",???"abcde"??br />
???W???????br />
?C?C++??,???q??W?%??,??????????, ?37.2%10=7.2?br />
??一 ???q??W?,???所 C?:
q算W?用法 描述
+ +op 正?br />
- -op 负?br />
++ ++op,op++ ?
-- --op,op-- ?
i++?++i???br />
i++???i??,?i???1,?????i++?,????????i,?i????i+1?br />
++i???i??,?i???1,?????++i?,??????i????i+1?br />
?i--?--i???br />
?3.1.??????????q??W????br />
public class ArithmaticOp{
public static void main( String args[] ){
int a=5+4; //a=9
int b=a*2; //b=18
int c=b/4; //c=4
int d=b-c; //d=14
int e=-d; //e=-14
int f=e%4; //f=-2
double g=18.4;
double h=g%4; //h=2.4
int i=3;
int j=i++; //i=4,j=3
int k=++i; //i=5,k=5
System.out.println("a = "+a);
System.out.println("b = "+b);
System.out.println("c = "+c);
System.out.println("d = "+d);
System.out.println("e = "+e);
System.out.println("f = "+f);
System.out.println("g = "+g);
System.out.println("h = "+h);
System.out.println("i = "+i);
System.out.println("j = "+j);
System.out.println("k = "+k);
}
}
其结果ؓ(f):
C:\Qjava ArithmaticOp
a = 9
b = 18
c = 4
d = 14
e = -14
f = -2
g = 18.4
h = 2.4
i = 5
j = 3
k = 5
§ 3.2?p?q??W?br />
?p?q??W????????,q????c????true?false??p?q??W?????q??br />
W?,???所 C?:
q算W?用法 q回true的情?br />
Q?op1Qop2 op1大于op2
Q? op1Q?op2 op1大于或等于op2
Q?op1Qop2 op1于op2
Q? op1Q?op2 op1于或等于op2
== op1==op2 op1与op2相等
!= op1!=op2 op1与op2不等
Java?,????c?????(????c???l??c??)????q?==?!=?????br />
?{?(q??C?C++??)?br />
?p?q???l??q??true?false,???C?C++??1?0?br />
?p?q??W???????q??W?一 ???,??????????????br />
if( aQb && b==c)
§ 3.3????q??W?br />
????q??W?q??????q??,???所 C?:
op1 op2 op1&&op2 op1||op2 !op1
false false false false true
false true false true true
true false false true false
true true true true false
}@@@
?&&、?br />
Z元运符,实现逻辑与、逻辑或?br />
?! Z元运符,实现逻辑非?br />
?对于布尔逻辑q算,先求符左边的表辑ּ的?Ҏ(gu)q算如果为true,则整个表
辑ּ的结果ؓ(f)true,不必对运符双的表辑ּ再进行运?同样,对与q算,如果左边表达?br />
的gؓ(f)false,则不必对双的表辑ּ求?整个表达式的l果为false?br />
下面的例子说明了关系q算W和布尔逻辑q算W的使用?br />
@@@[
public class RelationAndConditionOp{
public static void main( String args[] ){
int a=25,b=3;
boolean d=aQb; //d=false
System.out.println("aQb = "+d);
int e=3;
if(e!=0 && a/eQ?)
System.out.println("a/e = "+a/e);
int f=0;
if(f!=0 && a/fQ?)
System.out.println("a/f = "+a/f);
else
System.out.println("f = "+f);
}
}
其运行结果ؓ(f):
C:\Qjava RelationAndConditionOp
aQb = false
a/e = 8
f = 0
??:???,W???if???q????????0?????,??e!=0?false,所 ???需
??a/eq??q???br />
§ 3.4?q??W?br />
?q??W?????q???q????,Java???????所 C???q??W?:
?q??W??,?br />
?br />
??,??????q??W??br />
??????????W?????br />
3.4.1??br />
Java??????C??q???,????C??,最 ???W???,???W????0,??br />
?1????????:
?????,最 ???0,?????????w?(??q???C?),?+42????br />
00101010?br />
????a ,???l??????????,???????1,?????????br />
-42????11010110 (00101010 ????11010101 +1 11010110 )
?????C??,0?????一 ?,??00000000?(????,???C??,+0?-0??C?br />
???一 ?,???????c?)??????111111?C?-1???(q??????????br />
????)?br />
3.4.2????q??W?br />
?br />
?br />
?一 ?q???,???????q?????,??1??0,?0??1?br />
??:
0010101
?br />
1101010
??,?q??W??- q??W???,?21≠ -21?br />
3.4.3???q??W?&
??q??????,?????????1,????l???1,???0??:
0 & 0 = 0,0 &1 = 0,1 & 0 = 0,1 & 1 = 1
UMq算W?/strong>
包括Q?br /> “>> 右移”Q?#8220;<< 左移”Q?#8220;>>> 无符号右U?#8221;
例子Q?br />
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1111
其结果与 Math.floor((double)-5/(2*2*2)) 完全相同?/p>
-5<<3=-40
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1101 1000
其结果与 -5*2*2*2 完全相同?/p>
5>>3=0
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0000
其结果与 5/(2*2*2) 完全相同?/p>
5<<3=40
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0010 1000
其结果与 5*2*2*2 完全相同?/p>
-5>>>3=536870911
1111 1111 1111 1111 1111 1111 1111 1011
0001 1111 1111 1111 1111 1111 1111 1111
无论正数、负敎ͼ它们的右UR左UR无W号右移 32 位都是其本nQ比?-5<<32=-5?5>>32=-5?5>>>32=-5?br />
一个有的现象是,?1 左移 31 位再右移 31 位,其结果ؓ(f) -1?br />
0000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111
Java 定义的位q算Qbitwise operators Q直接对整数cd的位q行操作Q这些整数类型包括longQintQshortQcharQand byte 。表4-2 列出了位q算Q?nbsp;
q算W?nbsp;l果
~ 按位非(NOTQ(一元运)
& 按位与(ANDQ?nbsp;
| 按位或(ORQ?nbsp;
^ 按位异或QXORQ?nbsp;
>> 右移
>>> 右移Q左边空出的位以0填充
q算W?nbsp;l果
<< 左移
&= 按位与赋?nbsp;
|= 按位或赋?nbsp;
^= 按位异或赋?nbsp;
>>= 右移赋?nbsp;
>>>= 右移赋|左边I出的位?填充
<<= 左移赋?nbsp;
既然位运符在整数范围内对位操作Q因此理解这L(fng)操作?x)对一个g生什么效果是重要的。具体地_(d)知道Java 是如何存储整数值ƈ且如何表C数的是有用的。因此,在l讨Z前,让我们简短概qC下这两个话题?
所有的整数cd以二q制数字位的变化?qing)其宽度来表C。例如,byte 型?2的二q制代码?0101010 Q其中每个位|在此代?的次方,在最?
边的位以20开始。向左下一个位|将?1Q或2Q依ơ向左是22Q或4Q然后是8Q?6Q?2{等Q依此类推。因?2在其位置1Q?Q?的gؓ(f)1Q从
双?开始数Q;q样42?1+23+25的和Q也x2+8+32 ?
所有的整数cdQ除了char cd之外Q都是有W号的整数。这意味着他们既能表示正数Q又能表C数。Java 使用大家知道?的补?
Qtwo’s complement Q这U编码来表示负数Q也是通过与其对应的正数的二q制代码取反Q即?变成0Q将0变成1Q,然后对其l果?
1。例如,-42是通过?2的二q制代码的各个位取反Q即?0101010 取反得到11010101 Q然后再?Q得?1010110 Q即
-42 。要对一个负数解码,首先对其所有的位取反,然后?。例?42Q或11010110 取反后ؓ(f)00101001 Q或41Q然后加1Q这样就
得到?2?
如果考虑到零的交叉(zero crossing Q问题,你就Ҏ(gu)理解Java Q以?qing)其他绝大多数语aQ这L(fng)2的补码的原因。假定byte cd?
值零?0000000 代表。它的补码是仅仅它的每一位取反,即生?1111111 Q它代表负零。但问题是负零在整数数学中是无效的。ؓ(f)了解册
零的问题Q在使用2的补码代表负数的值时Q对其值加1。即负零11111111 ?后ؓ(f)100000000 。但q样?位太靠左而不适合q回?
byte cd的|因此Z规定Q?0?的表C方法一P-1的解码ؓ(f)11111111 。尽我们在q个例子使用了byte cd的|但同L(fng)?
本的原则也适用于所有Java 的整数类型?
因ؓ(f)Java 使用2的补码来存储负数Qƈ且因为Java 中的所有整数都是有W号的,q样应用位运符可以Ҏ(gu)地达到意想不到的l果。例如,不管你如?
打算QJava 用高位来代表负数。ؓ(f)避免q个讨厌的意外,误住不高位的序如何Q它军_一个整数的W号?
4.2.1 位逻辑q算W?
位逻辑q算W有“?#8221;QANDQ?#8220;?#8221;QORQ?#8220;异或QXOR Q?#8221;?#8220;非(NOTQ?#8221;Q分别用“&”?#8220;|”?#8220;^”?#8220;~”表示Q?-3 表显CZ每个位逻辑q算的结果。在l箋讨论之前Q请C位运符应用于每个运数内的每个单独的位?
?-3 位逻辑q算W的l果
A 0 1 0 1 B 0 0 1 1 A | B 0 1 1 1 A & B 0 0 0 1 A ^ B 0 1 1 0 ~A 1 0 1 0
按位非(NOTQ?
按位非也叫做补,一元运符NOT“~”是对其运数的每一位取反。例如,数字42Q它的二q制代码为:(x)
00101010
l过按位非运成?
11010101
按位与(ANDQ?
按位与运符“&”Q如果两个运数都是1Q则l果?。其他情况下Q结果均为零。看下面的例子:(x)
00101010 42 &00001111 15
00001010 10
按位或(ORQ?
按位或运符“|”QQ何一个运数?Q则l果?。如下面的例子所C:(x)
00101010 42 | 00001111 15
00101111 47
按位异或QXORQ?
按位异或q算W?#8220;^”Q只有在两个比较的位不同时其l果?nbsp;1。否则,l果是零。下面的例子昄?#8220;^”q算W的效果。这个例子也表明了XOR q算W的
一个有用的属性。注意第二个q算数有数字1的位Q?2对应二进制代码的对应位是如何被{换的。第二个q算数有数字0的位Q第一个运数对应位的数字不变?
当对某些cdq行位运时Q你会(x)看到q个属性的用处?
00101010 42 ^ 00001111 15
00100101 37
位逻辑q算W的应用
下面的例子说明了位逻辑q算W:(x)
// Demonstrate the bitwise logical operators.
class BitLogic {
public static void main(String args[]) {
String binary[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
int a = 3; // 0 + 2 + 1 or 0011 in binary
int b = 6; // 4 + 2 + 0 or 0110 in binary
int c = a | b;
int d = a & b;
int e = a ^ b;
int f = (~a & b) | (a & ~b);
int g = ~a & 0x0f;
System.out.println(" a = " + binary[a]);
System.out.println(" b = " + binary);
System.out.println(" a|b = " + binary[c]);
System.out.println(" a&b = " + binary[d]);
System.out.println(" a^b = " + binary[e]);
System.out.println("~a&b|a&~b = " + binary[f]);
System.out.println(" ~a = " + binary[g]);
}
}
在本例中Q变量a与b对应位的l合代表了二q制数所有的 4 U组合模式:(x)0-0Q?-1Q?-0 Q和1-1 ?#8220;|”q算W和“&”q算W分
别对变量a与b各个对应位的q算得到了变量c和变量d的倹{对变量e和f的赋D明了“^”q算W的功能。字W串数组binary 代表??5 对应
的二q制的倹{在本例中,数组各元素的排列序昄了变量对应值的二进制代码。数l之所以这h造是因ؓ(f)变量的值n对应的二q制代码可以被正的存储在数
l对应元素binary[n] 中。例如变量a的gؓ(f)3Q则它的二进制代码对应地存储在数l元素binary[3] 中。~a的g数字0x0f Q对?
二进制ؓ(f)0000 1111 Q进行按位与q算的目的是减小~a的|保证变量g的结果小?6。因此该E序的运行结果可以用数组binary 对应的元
素来表示。该E序的输出如下:(x)
a = 0011 b = 0110 a|b = 0111 a&b = 0010 a^b = 0101 ~a&b|a&~b = 0101 ~a = 1100
4.2.2 左移q算W?
左移q算W?lt;<使指定值的所有位都左U规定的ơ数。它的通用格式如下所C:(x)
value << num
q里Qnum 指定要移位值value Ud的位数。也是Q左U运符<<使指定值的所有位都左Unum位。每左移一个位Q高阶位都被Ud
Qƈ且丢弃)Qƈ?填充双。这意味着当左Uȝq算数是int cdӞ每移?位它的第31位就要被Udq且丢弃Q当左移的运数是long cd
Ӟ每移?位它的第63位就要被Udq且丢弃?
在对byte 和shortcd的D行移位运时Q你必须心。因Z知道Java 在对表达式求值时Q将自动把这些类型扩大ؓ(f) int 型,而且Q表
辑ּ的g是int 型。对byte 和shortcd的D行移位运的l果是int 型,而且如果左移不超q?1位,原来对应各位的g不会(x)丢弃。但
是,如果你对一个负的byte 或者shortcd的D行移位运,它被扩大为int 型后Q它的符号也被扩展。这P整数值结果的高位׃(x)?填充?
因此Qؓ(f)了得到正的l果Q你p舍弃得到l果的高位。这样做的最单办法是结果{换ؓ(f)byte 型。下面的E序说明了这一点:(x)
// Left shifting a byte value.
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
该程序生的输出下所C:(x)
Original value of a: 64
i and b: 256 0
既然每次左移都可以原来的操作数d,E序员们l常使用q个办法来进行快速的2 的乘法。但是你要小心,如果你将1U进高阶位(31?3位)Q那么该值将变ؓ(f)负倹{下面的E序说明了这一点:(x)
// Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
q里Qnum 指定要移位值value Ud的位数。也是Q左U运符<<使指定值的所有位都左Unum位。每左移一个位Q高阶位都被Ud
Qƈ且丢弃)Qƈ?填充双。这意味着当左Uȝq算数是int cdӞ每移?位它的第31位就要被Udq且丢弃Q当左移的运数是long cd
Ӟ每移?位它的第63位就要被Udq且丢弃?
在对byte 和shortcd的D行移位运时Q你必须心。因Z知道Java 在对表达式求值时Q将自动把这些类型扩大ؓ(f) int 型,而且Q表
辑ּ的g是int 型。对byte 和shortcd的D行移位运的l果是int 型,而且如果左移不超q?1位,原来对应各位的g不会(x)丢弃。但
是,如果你对一个负的byte 或者shortcd的D行移位运,它被扩大为int 型后Q它的符号也被扩展。这P整数值结果的高位׃(x)?填充?
因此Qؓ(f)了得到正的l果Q你p舍弃得到l果的高位。这样做的最单办法是结果{换ؓ(f)byte 型。下面的E序说明了这一点:(x)
// Left shifting a byte value.
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
该程序生的输出下所C:(x)
Original value of a: 64
i and b: 256 0
因变量a在赋D辑ּ中,故被扩大为int 型,64Q?100 0000 Q被左移两次生成?56 Q?0000 0000 Q被赋给变量i。然而,l过左移后,变量b中惟一?被移出,低位全部成了0Q因此b的g变成??
既然每次左移都可以原来的操作数d,E序员们l常使用q个办法来进行快速的2 的乘法。但是你要小心,如果你将1U进高阶位(31?3位)Q那么该值将变ؓ(f)负倹{下面的E序说明了这一点:(x)
// Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
}
该程序的输出如下所C:(x)
536870908
1073741816
2147483632
-32
因变量a在赋D辑ּ中,故被扩大为int 型,64Q?100 0000 Q被左移两次生成?56 Q?0000 0000 Q被赋给变量i。然而,l过左移后,变量b中惟一?被移出,低位全部成了0Q因此b的g变成??
既然每次左移都可以原来的操作数d,E序员们l常使用q个办法来进行快速的2 的乘法。但是你要小心,如果你将1U进高阶位(31?3位)Q那么该值将变ؓ(f)负倹{下面的E序说明了这一点:(x)
// Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
q里Qnum 指定要移位值value Ud的位数。也是Q左U运符<<使指定值的所有位都左Unum位。每左移一个位Q高阶位都被Ud
Qƈ且丢弃)Qƈ?填充双。这意味着当左Uȝq算数是int cdӞ每移?位它的第31位就要被Udq且丢弃Q当左移的运数是long cd
Ӟ每移?位它的第63位就要被Udq且丢弃?
在对byte 和shortcd的D行移位运时Q你必须心。因Z知道Java 在对表达式求值时Q将自动把这些类型扩大ؓ(f) int 型,而且Q表
辑ּ的g是int 型。对byte 和shortcd的D行移位运的l果是int 型,而且如果左移不超q?1位,原来对应各位的g不会(x)丢弃。但
是,如果你对一个负的byte 或者shortcd的D行移位运,它被扩大为int 型后Q它的符号也被扩展。这P整数值结果的高位׃(x)?填充?
因此Qؓ(f)了得到正的l果Q你p舍弃得到l果的高位。这样做的最单办法是结果{换ؓ(f)byte 型。下面的E序说明了这一点:(x)
// Left shifting a byte value.
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
该程序生的输出下所C:(x)
Original value of a: 64
i and b: 256 0
因变量a在赋D辑ּ中,故被扩大为int 型,64Q?100 0000 Q被左移两次生成?56 Q?0000 0000 Q被赋给变量i。然而,l过左移后,变量b中惟一?被移出,低位全部成了0Q因此b的g变成??
既然每次左移都可以原来的操作数d,E序员们l常使用q个办法来进行快速的2 的乘法。但是你要小心,如果你将1U进高阶位(31?3位)Q那么该值将变ؓ(f)负倹{下面的E序说明了这一点:(x)
// Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num << 1;
System.out.println(num);
}
}
}
该程序的输出如下所C:(x)
536870908
1073741816
2147483632
-32
该程序的输出如下Q?br />
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);}}
b = 0xf1
// Unsigned shifting a byte value.
class ByteUShift {
static public void main(String args[]) {
int b = 2;
int c = 3;
a |= 4;
b >>= 1;
c <<= 1;
a ^= c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
a = 3
b = 1
c = 6
原文
http://www.3geye.net/?3/viewspace-3350
大家都知道J2ME 采用一个线E去获取数据Q然后得到数据后更新屏幕是g很容易的事情Q?br />
Thread{
public void run(){
getData();
repaint();
}
}
q样做就O(jin)K?span style="display: none;">3GEYER`8IL8S!I|+jFa
但是q个Ҏ(gu)在C#上能成功吗?br />
{案是NOQؓ(f)什么呢。安装他们的APIs的说法是Q采用线E更新屏q的是应该要用一个委托的方式来执行?br />
看看我是怎么做的?span style="display: none;">3GEYE2M?{} VC#O#tqa
Thread{
public void run(){
getData();
updateWebBrowser();
}
delegate void Repaint();
public void repaint()
{
this.webBrowser.repaint();
}
/**
* 更新视图
*/
public void updateWebBrowser()
{
//q里是更新屏q的代码Q看各自需求做相应的实现?span style="display: none;">3GEYE&h:OBm,Ukm2y
}
}
上面是C#的处理方式。应该也是可以理解的
Micro Window Toolkit(MWT)是一个用于开?a onclick="javascript:tagshow(event, 'J2ME');" href="javascript:;" target="_self">J2ME 用户界面(UI)的工具包。它h友好Q强大,快速,开?/strong> {特性。因为它?灉|"来自 AWTQSwing和SWT。可以用bitmap fonts{来自定义组件。它专门为嵌入式开发而设计和优化。基于LGPL发布?br /> 目地址Q?a target="_blank">http://j2me-mwt.sourceforge.net/
1 - J2ME Desktop: | |||
![]() |
![]() |
![]() |
![]() |
Download theJad andJar or view it withJava WebStart |
2 - ELP ~ RPG: | |||
![]() |
![]() |
![]() |
![]() |
Download theJad andJar or view it withJava WebStart |
3 - Progress Bar: | |||
![]() |
![]() |
![]() |
![]() |
Download theJad andJar or view it withJava WebStart |
4 - Messenger Interface: | |||
![]() |
![]() |
![]() |
![]() |
Download theJad andJar or view it withJava WebStart |
J4ME
是一个J2ME应用E序开发包。它包括一个UI框架Q一个日记框架用于帮助调试因不同品牌手机
的差异而生的问题Q一个蓝牙GPS框架让你能够?
用JSR-179 Location
API接口从蓝牙GPS讑֤获取定位信息和一个Javacd其中包含了J2ME中没有的Ҏ(gu)比如双精度型数字的计等?br />
BaseMovil是一个J2ME应用E序开发框架。它由多个比较独立类库组成包括:(x)
OpenBaseMovil-coreQ整个框架的底层基础
cdQ它主要提供国际?/strong>
支持、Q务控制、加密、压~、QҎ(gu)持、properties文g支持、一个MVC框架、一个事件框架?span style="display: none;">3GEYEXO3L0@C$z
M8E
OpenBaseMovil-dbQ一个关pd数据?/strong>
引擎Q其中一个表格存储的数据可上千?span style="display: none;">3GEYE1]
m$?/vE|1@
OpenBaseMovil-scriptQ一?a onclick="javascript:tagshow(event, '%BD%C5%B1%BE');" href="javascript:;" target="_self">脚本
引擎?span style="display: none;">3GEYE2\G:rVA7Ez
OpenBaseMovil-uiQ一个UI工具包?br />
q个几类库都能够完全集成在一起用?span style="display: none;">3GEYEotaZ5J
http://www.openbasemovil.org/
一个非常小的script脚本引擎Q可以同时在j2me / j2se / c++ platform上面q行
它的目标是用这个脚本引擎便于开发一个更加灵zȝj2me 游戏?br />
q个脚本有点像BASIC
q东西不错,是一个开源的脚本引擎Q大家可以学?fn)里面的思想
里面其中带了一个例子,?子棋。感觉挺不错的。这东西在SF也挺z跃的?/p>
http://sourceforge.net/projects/j2megamescript/
Y!Goq是一个Yahoo Messenger J2ME客户端?/p>
EBookME是一个用于把导入的文?a onclick="javascript:tagshow(event, '%CE%C4%BC%FE');" href="javascript:;" target="_self">文g (HTML,DOC,PDF,…)生成J2ME?sh)子书籍格?JAD,JAR)的JavaE序。生成的?sh)子?/strong> c可以在支持MIDP1.0的手Z阅读?/p>
http://ebookme.sourceforge.net/
jMobileCore 包是一个强大的工具用来开发J2ME应用E序.jMobileCore提供支持开发简z的Q基于Canvas?a onclick="javascript:tagshow(event, '%CD%BC%D0%CE');" href="javascript:;" target="_self">囑Ş 用户接口Q快速地数据讉KQ可靠地? ?化多U程midlet应用E序。jMobileCore包可工作在Q何支持J2ME (MIDP1.0 和CLDC1.0)的移动电(sh)话与PDA讑֤.
http://jmobilecore.sourceforge.net/
q有l典的J2ME-POLISH
原文 http://www.3geye.net/?3/viewspace-3235
lWinCEE序加上菜单的功能?br />
public void createMainMenu()
{
// Create an empty MainMenu.
MainMenu mainMenu = new MainMenu();
MenuItem menu = new MenuItem();
menu.Text = "菜单";
MenuItem menuItem = new MenuItem();
menuItem.Text = "打开|页";
menu.MenuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.Text = "源代?;
menu.MenuItems.Add(menuItem);
menuItem = new MenuItem();
menuItem.Text = "退?;
menu.MenuItems.Add(menuItem);
// Add two MenuItem objects to the MainMenu.
mainMenu.MenuItems.Add(menu);
// Bind the MainMenu to Form1.
Menu = mainMenu;
}
感觉微Y的东西就是简单?
昨天晚上试验了下Q发现双~冲来是不v作用Q很是郁闗怎么办了Q今天看了一文章才恍然大?zhn)。?span style="display: none;">3GEYE|Q~@$` PS,c
在上位机Windows操作q_Q?.net 2.0框架集)下实现图形双~存有很多办法,每种办法在上位机都有很好的效果,但是很不q,在WinCE4.2操作pȝQ?net 2.0_框架集)下这些方法要么不支持Q要么效果很差(q是闪烁的厉宻I?/span>
在上位机中,一般都有这么几U办法:(x)
1?span color="black" face="宋体" style="font-size: 10pt;">应用E序中用双~冲的最便的Ҏ(gu)是?span>.NET Framework为窗体和控g提供的默认双~冲Q通过?span>DoubleBuffered属性设|ؓ(f)True卛_?/span>
2、通过SetStyle修改控g属性?/span>
public void EnableDoubleBuffering()
{
}
3、比较经典的一U如下:(x)重蝲OnPaint函数
protected override void OnPaint(PaintEventArgs e)
{
System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height);//双缓冲技?/span>,先将所有要ȝd该图片中,再调?/span>GSd该图?/span>.
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
//在这里画你所需要画?/span>
//-------------------
e.Graphics.DrawImage((System.Drawing.Image)b,0,0);
g.Dispose();
base.OnPaint (e);
}
前两U办法在WinCE下都不支持,W三U办法是可以使用的,但效果不佻Iq是有明昄闪烁现象。经q上|查资料和测试,发现在第三种办法基础上要q行如下处理Q效果才非常完美?/span>
׃我是在Panel上绘的图Q所以我z了一个类EmbedPanelQ重载了OnPaintBackground函数Qƈ且置该函Cؓ(f)I?span style="display: none;">3GEYE&W-}XFjr~+n
public class EmbedPanel : Panel
{
protected override void OnPaintBackground(PaintEventArgs paintg)
{
//不绘制背?span style="display: none;">3GEYE w,ki
@:Zz
}
}
private void pb_Paint(object sender, PaintEventArgs e)
{
try
{
pb_Graphics.FillRectangle(new SolidBrush(BackColor), Rect); //l制背景
//--------------------------------------------------------
... ... 具体的绘图代?/span>
//--------------------------------------------------------
e.Graphics.DrawImage((System.Drawing.Image)pb_Bitmap, 0, 0);
}
catch (Exception err)
{
ShowInfo(3000, 2, err.Message, "pb_Paint");
}
}
//注:(x)在WINCE试时发玎ͼ在OnPaint中的写System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height)代码Q程序运行不长时间便?x)导致WinCEL。所以我是在cȝ初始化中执行该代码的?/span>
q样一来,很完美的在.net_框架集下解决了绘N烁问题?/span>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1402520