re: CS结构软件自动升级实现(一)[未登录] Matthew Chen 2009-01-16 09:51
@rochoc
你在客户端用的是纯粹的java项目吧,我目前用的是eclipse RCP product,不包括ui的组件,可能6M多,更新方式是下载新的版本的jar,放在plugins目录下,重启它会自动使用更新版本的jar,然后清除旧的就可以了。
哦,当然我用到是SWT.
re: CS结构软件自动升级实现(一)[未登录] Matthew Chen 2009-01-10 10:08
@ochoc
但是用http的话放个xml文件和若干个程序文件在网站上,可以把更新的整个任务都拉到客户端来做。socket更新通讯协议一改变意味着服务器和客户端都要修改,而放在静态网站上的xml内容可以相对固定地存在。
最好提供在任何情况的更新失效之后提示手动下载,不仅是针对网络失败等的原因,更是为了应对暂时没有考虑到会出现的问题。
UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度(一个字符六个字节)。
UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。
对于超过一个字节长度的字符,才用以下编码规范:
左边第一个字节1的个数表示这个字符编码字节的位数,
例如两位字节字符编码样式为为:110xxxxx 10xxxxxx;
三位字节字符的编码样式为:1110xxxx 10xxxxxx 10xxxxxx.;
以此类推,六位字节字符的编码样式为:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。
xxx 的值由字符编码的二进制表示的位填入。只用最短的那个足够表达一个字符编码的多字节串。
例如:
Unicode 字符: 00 A9(版权符号) = 1010 1001,
UTF-8 编码为:11000010 10101001 = 0x C2 0xA9;
字符 22 60 (不等于符号) = 0010 0010 0110 0000,
UTF-8 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA0
UTF-8的编码原理和特性:
U+0000~U+007E 1 _ _ _ _ _ _ _ (7bits)
U+0080~U+07FF 1 1 0_ _ _ _ _ 1 0_ _ _ _ _ _ (11bits)
U+0800~U+FFFF 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ (16bits)
Character.toChars,又学了个方法,参数是代码点吧。
恩,什么时候讲讲new String(,)的第二个参数
re: Base64编码学习和java源程序实现[未登录] Matthew Chen 2008-12-24 14:27
把三个字节放在一个4字节int中的前三个字节位置,每次右移动2bits位,取出前面的6个bits位,剩下的始终移动到最左边。反复即可。
试了一下,还真的不行...
我之前只是用某个的gif动画
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.matthew.common.UIManagerUtil;
public class GifDraw {
private JFrame frame;
/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
try {
UIManagerUtil.setSystemLookAndFeel();
GifDraw window = new GifDraw();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the application
*/
public GifDraw() {
initialize();
}
/**
* Initialize the contents of the frame
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 500, 375);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final ImageIcon i = new ImageIcon("105.gif");
final JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(i.getImage(), 0, 0, this);
}
};
panel.setLayout(null);
frame.getContentPane().add(panel, BorderLayout.CENTER);
final JPanel panel_1 = new JPanel();
panel_1.setLayout(new FlowLayout());
frame.getContentPane().add(panel_1, BorderLayout.NORTH);
final JLabel label = new JLabel(i);
label.setText("New JLabel");
panel_1.add(label);
final JButton button = new JButton(i);
button.setText("New JButton");
panel_1.add(button);
}
}
swing 也可以很简单地实现gif动画绘制,同时试了一下JLabel和JButton,直接setIcon就可以了。
public class ShowGifPanel extends JPanel{
ImageIcon image = new ImageIcon("/root/opt/loading.gif");
protected void paintComponent(Graphics g) {
//记得调用超类方法,还有容器的绘制应该在这个方法里添加才对。
super.paintComponent(g);
g.drawImage(image.getImage(), 0, 0, this);
}
}
re: 【转载】 删除.svn文件夹[未登录] Matthew Chen 2008-12-05 08:51
装个客户端,然后用导出命令不就行了?
re: java 与 c#的不同(2) [未登录] Matthew Chen 2008-11-26 08:26
这位同学为什么都浮于表面,好好把oo学个透彻再说吧。
re: 程序员小史记005 Matthew Chen 2008-09-21 21:20
我也和你一样,签了又要毁约,那时也是这么麻烦,原来还以为自己怎么那么不幸呢,原来都这样啊,大家不要怕毕业找工作那些事,每个人都是这样过来的,多接触一下社会有好处。
link方式和dropin不是差不多的方式吗?还以为插件丢进dropin里面就是了,只是免除写link这个步骤而已...
恩,EDT是这样的,invokeXXX就有点像SWT里面的Display.synXXX,具体名字记不得了,trylock比lock好,是马上返回而非阻塞吧。
re: 奇怪的paintComponent() Matthew Chen 2008-08-14 19:44
remove(Rectangle2D r)的参数是如何获得的?是通过点击生成的吧,这个能够和List里面的匹配吗?用==看起来怪怪的,是不是该用equals,代码不够全,看不透。
re: JavaSVN:CVS的冬天来临 Matthew Chen 2008-07-17 23:12
反对标题党.
好久没看lz的blog了。
讲到paintImmediately和“已经在EDT中调用的方法中间...”,就好像edt严格的先进后出提供的一个小变通,可以超越之前请求但未绘制事件先执行。
我想到swt绘制的一个问题,如随拖拽行为而产生的多个界面上的重绘,我们要作处理使其同时发生而没有滞后,方法是在其中一个的paintcontrol中加入对另一个的redraw调用,后来看来api,不知是否是update这个方法能够解决的问题。
re: 不会偷懒的程序员不是好程序员! Matthew Chen 2008-06-21 08:45
说偷懒是玩笑话。
写程序就是写程序,想的并没有那么复杂,写好了就是。
不过lz文章中的聪明的程序员指的只是小聪明,是聪明反被聪明悟的那种。
re: 通过反射修改类的私有字段值,调用私有方法 Matthew Chen 2008-06-20 08:38
re: 冒号和他的学生们(连载18)——系统语言[未登录] Matthew Chen 2008-06-06 22:08
@郑晖
当时微软开发的vc++,标准还没制定,另外java的崛起也在这个时候,从两个方面反映了c++都有对商业应用支持不够的地方:标准化和统一的通用性,“不好用”这个词很广泛,很好用,所以我才挑的它。
命名空间确实是和包还有静态类都不同的东西,就像是允许函数和类的混合集合吧。也许从你的角度来说是不合适的,但从较纯粹的oo的java来说,考虑一下效率和实现难易,却也只能是“合适”的了。
你这里好啊,大家都平静一点讨论,不要太吵。
re: 冒号和他的学生们(连载18)——系统语言 Matthew Chen 2008-06-06 09:27
c++的复杂源于多方面的原因,如lz提到了不少,但其实大多数原因正是因为他本身的复杂所引起的,这有点恶性循环,你不够好用人家就不支持你,所以你就停步不前,越来越不好用。
oop不一定是万金油,但是oop就是要作万金油,一切逻辑上可感知的都可以是对象,从这点上来说,Math是很正常的。
历史发展和进化的轨迹是曲折的,退步和埋没都很正常,不要以为金子总能发光,和氏璧为人所知的时候对原来支持它的主人却已经没有任何价值了。
re: .Net世界的困惑[未登录] Matthew Chen 2008-06-01 23:16
不做web很多年了,这么看来java还能再撑个三五年,可是,web能撑多少年呢?
黄莺真的很认真啊。
对于lz说的被另一个继承覆盖(override)的说法,怎么看得别扭,就是继承自非object的类就好了,没必要太复杂。
re: 冒号和他的学生们(连载14)——教学计划[未登录] Matthew Chen 2008-05-23 22:56
java和c++比较学习是很不错的。
re: jexcelapi使用小记 Matthew Chen 2008-05-21 09:13
用过,跨平台,无需装office就可以操作,算是方便吧。
re: 关于《冒号和他的学生们》 Matthew Chen 2008-05-07 15:20
老师的文章,以后少不了关注的,期待。
re: 关于Java String对象创建问题解惑[未登录] Matthew Chen 2008-04-27 22:05
to 银河使者
看不懂你的意思,是认同我的说法吗?因为看你的回复和我的意思基本一致。
to stanleyxu
你提到了编译器,我想那时生成的保存在静态对象池中的string是字节码的一部分,运行时调入内存的,而在内存中直接创建的string对象确实和普通的数组一样的方式,没有为连接做特别的结构考虑。
re: 关于Java String对象创建问题解惑 Matthew Chen 2008-04-27 11:01
你是自己研究的吧,基本上差不多,只是
String s = "Fred";
这句不会在运行时创建String对象。
s = (new StringBuilder(String.valueOf(s))).append("47").toString();
这句StringBuilder.toString();是会创建String对象的。
这样一加一减,你的答案还是可用的。
re: 字符串的压缩和解压缩[未登录] Matthew Chen 2008-04-25 22:01
toString()不是采用平台默认编码,而是就是unicode,而且("中国China")也是unicode,java内部字符串编码只是这种类型,对外实现读取和写入文本才是使用平台默认编码的。
re: NSIS 常用小问题合集[转] Matthew Chen 2008-04-23 08:54
不知。
re: NSIS安装制作基础教程[初级篇][转] Matthew Chen 2008-04-23 08:54
文中有讲,大概意思就是你实在没办法了在生成的代码上加
!insertmacro MUI_LANGUAGE "SimpChinese"
re: C#与Java之比较[未登录] Matthew Chen 2008-04-19 21:39
在C#中Get和Set不一定成对出现,只要最少包含一个就够了。
re: NetBeans国际化功能(一) Matthew Chen 2008-04-15 08:37
不用改操作系统的语言,在main的第一句加个Locale.setDefault(Locale.English);就可以了,最新的6.0好像可以在启动的时候设置locale。
可视化的情况下属性里有一项是可以设置可视化下的语言的,也可以拿来用。
re: 4月语言排行榜出炉,JAVA仍是第一 Matthew Chen 2008-04-12 20:47
呵呵,不能夜郎自大了啊,道路还是曲折的。
re: Java的垃圾回收之算法 Matthew Chen 2008-04-12 10:24
re: When the wind blows Matthew Chen 2008-04-11 21:24
good point!
re: Eclipse文件转码插件 Matthew Chen 2008-04-11 21:17
很实用,实际情况确实有可能有这样的问题,不过作为新的项目应该一开始就规约统一的编码方式。
re: C# 学习笔记 (1) Matthew Chen 2008-04-03 08:26
对于9,值类型是放在栈上,不过严格上讲,值类型其实是可复制的结构体,boxing就是在堆上分配类空间,将其中一部分用结构体赋值(即复制)得到,所以看有些书上说值类型只存在栈上,其实任何类类型都可能存在对值类型的引用,而栈空间并非在类的生命周期中都可用,所以值类型的数据其实是可能保存在栈上的。
re: Java桌面应用 -- mp3在线搜索工具 Matthew Chen 2008-03-27 08:15
@BeanSoft
用swt designer吧,我一直在用蛮不错的,swt的gridlayout可以玩出不少花样的,毕竟eclipse就放在那里,你可以想象它就是swt做出来的,所以我们花心思下去了,就能做出专业级别的软件。IBM如果什么都做的很好那就摆明不给产品提供商机会,看看微软,平台人家搭的,上面的软件(在eclipse就像插件)都是别人做,给人留财路,给人开辟环境土壤,这样才能带动一些中小厂商跟着你。
作者讲得不错,Swing Application Framework 之前也了解过一点点,期待。
re: 今天遇到的两道比较变态的面试题 Matthew Chen 2008-03-21 08:10
个人做的话都不会出错,ide并不会造成学习上的问题,因为我以前都试过用ide写各种各样的代码,也出过类似的问题,一句话,从语言本身健壮性所赋予的行为,很容易理解的。
re: JFace进度条使用经验一则 Matthew Chen 2008-02-29 13:43
我把你的代码拷过来,用new ProgressMonitorDialog(s).run(true, true, runnable); 好像可以用啊,进度条走了几次就停下来,cancel也可以,没出什么问题啊,我用swt3.3
re: Swing中让皮肤彻底成为OX Mac样式 Matthew Chen 2008-01-26 15:28
这个应该是quaqua自己的反射方法吧。
re: 用java2D的scale实现图片翻转 Matthew Chen 2008-01-22 08:20
底层是仿射变换来实现的吗?
re: 我是个技术菜鸟 Matthew Chen 2008-01-22 08:19
强,这样都能上研,楼主现在开始学也不晚。我感觉大学四年我也没学多少东西,工作以后努力学了还是可以的,毕竟技术不断的更新,很多也是要重头学起的,只要你基础扎实,在软件这方面有兴趣,就不成问题。
re: 一题有关String笔试题的分析 Matthew Chen 2008-01-09 08:24
第一题不是说一种吗,好像看哪里说过常量池是编译期结束就创建好的,运行时不会创建。
re: YOYOPlayer开发手记(二)概述 Matthew Chen 2008-01-08 21:15
佩服。