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
佩服。