我經常用win2003的系統,這個是因為啟用硬件和DirectX加速默認沒有加速。
*硬件加速:桌面點擊右鍵--屬性(Properties) -> 設置(Settings )--高級(Advanced )--疑難解答(Troubleshoot)。把該頁面的硬件加速滾動條拉到“完全”( Full),最好點擊“確定”(OK)保存退出。這期間可能出現一瞬的黑屏是完全正常。
*DirectX加速:打開“開始”(Start) -> “運行”(Run),鍵入“dxdiag”并回車打開“DirectX 診斷工具”(DirectX Tools),在“顯示”(Display)頁面,點擊DirectDraw, Direct3Dand AGP Texture 加速三個按鈕啟用加速。把“聲音的硬件加速級別”(Hardware Sound Acceleration Leve l)滾動條拉到“完全加速”( Full Acceleration)。
還有雙擊exe時報內存不能“written”的錯誤,該問題的解決辦法是,
我的電腦--屬性--高級--性能--設置--數據執行保護--選擇只為關鍵windows程序和服務啟用數據執行保護 即可。確定,重啟機器,一切正常,順利進入游戲!
org.apache.jasper.compiler.TagLibraryInfoImpl.createAttribute(TagLibraryInfoImpl.java:568)
org.apache.jasper.compiler.TagLibraryInfoImpl.createTagInfo(TagLibraryInfoImpl.java:401)
org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:248)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:162)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:495)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
導致以上原因的是因為javax.servlet.jsp.tagext.TagAttributeInfo有沖突
當前classpath中有兩個version的javax.servlet.jsp.tagext.TagAttributeInfo class,一個在servlet.jar另一個在jsp-api.jar中。 jsp-api.jar的那個是好用的,它只包含javax\servlet\jsp這個包,而servlet.jar中也包含它,同時包含servlet需要的關鍵包。所以在classpath中jsp-api.jar要比servlet.jar先被reference。
另外在jboss3.2.*之后的自己帶的lib中已經將javax\servlet\jsp從servlet.jar中分開了,分別是javax.servlet.jar(jsp-api.jar)和javax.servlet.jsp.jar(serlvet-api.jar).
最后申明一下,該問題的解決版權歸該位仁兄http://blog.donews.com/bluecatr/archive/2006/07/05/947177.aspx,致敬!哈哈!
2
3 import java.io.BufferedReader;
4 import java.io.InputStreamReader;
5 import java.net.HttpURLConnection;
6 import java.net.URL;
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import java.util.List;
10
11 public class ParseHtml extends Thread {
12 /*
13 * 解析網址運行
14 *
15 */public void run() {
16 try {
17 // 河北天氣
18 String urlAddress = "http://www.weathercn.com/forecast/province.jsp?province=hebei";
19 startParse(urlAddress);
20 } catch (Exception e) {
21 e.printStackTrace();
22 System.out.println("網絡錯誤,提取天氣數據出錯!");
23 }
24 }
25
26 /*
27 *
28 * 開始解析網址
29 *
30 *
31 */public void startParse(String urlAddress) throws Exception {
32 System.out.println("開始提取網址:" + urlAddress);
33 URL url = new URL(urlAddress);
34 HttpURLConnection httpConnection = (HttpURLConnection) url
35 .openConnection();
36 httpConnection.setRequestProperty("User-Agent", "Mozilla");
37 httpConnection.setRequestProperty("Connection", "Keep-Alive");
38
39 int responseCode = 0;
40 try {
41 responseCode = httpConnection.getResponseCode();
42 } catch (Exception ex) {
43 System.out.println("讀取網頁失敗,返回代碼:" + responseCode);
44 }
45 System.out.println("讀取網頁反回代碼:" + responseCode);
46
47 // 獲得輸入流
48 InputStreamReader ir = new InputStreamReader(httpConnection
49 .getInputStream());
50 if (ir != null) {
51 BufferedReader reader = new BufferedReader(ir);
52 System.out.println(reader);
53 if (reader != null)
54 // 調用從何處取數據
55 isStartPoint(reader, "99", 1);
56 reader.close();
57 ir.close();
58 }
59
60 }
61
62 private void isStartPoint(BufferedReader reader, String tag, int number)
63 throws Exception {
64 String CurrentLine = "";
65
66 // 從流中讀取一行字符串(html源文件)
67 while ((CurrentLine = reader.readLine()) != null) {
68
69 // 循環查詢整個 CurrentLine 中的 tag,查到一個就將計數據器 number 減 1
70 int fromIndex = 0;
71 while ((number != 0)
72 && (CurrentLine.toUpperCase().indexOf(tag.toUpperCase(),
73 fromIndex) != -1)) {
74 fromIndex = CurrentLine.toUpperCase().indexOf(
75 tag.toUpperCase(), fromIndex) + 1;
76 if (fromIndex > 0)
77 number--;
78 }
79
80 // 如果到了起始點即 number == 0 時,開始執行取數據操作
81 List sb = new ArrayList();
82 if ((CurrentLine.indexOf("citydetail") > 0)
83 && (CurrentLine.indexOf("99") > 0)) {
84 sb.add(this.processBuffer(CurrentLine));
85 // 截取天氣信
86 CurrentLine = reader.readLine();
87 CurrentLine = reader.readLine();
88 if (CurrentLine != null) {
89 sb.add(this.processBuffer(CurrentLine));
90 }
91 // 截取最低氣溫
92 CurrentLine = reader.readLine();
93 if (CurrentLine != null) {
94 sb.add(this.processBuffer(CurrentLine));
95 }
96 }
97 StringBuffer s = new StringBuffer();
98 // 將所有的截取信息匯總進行處理,用‘,’間隔便于以后截取相應信息
99 for (Iterator it = sb.iterator(); it.hasNext();) {
100 String i = it.next().toString();
101 s.append(i);
102 }
103 String Tq = s.toString();
104 String[] Tqxx = Tq.split(",");
105 if (Tqxx.length >= 3) {
106 System.out.println(Tq);
107 }
108 }
109 }
110
111 /*
112 * 判斷并從網頁上截取
113 *
114 * @param old
115 */
116 private String processBuffer(String strLine) throws Exception {
117 // 保存當前取得的 城市
118 StringBuffer sb = new StringBuffer();
119 String Tqxx;
120 // 當當前行含有“城市”時,截取相應的城市名稱
121 if (strLine.indexOf("citydetail") > 0) {
122 Tqxx = subString(strLine, "sta_id", "<");
123 Tqxx = Tqxx.substring(24);
124 sb = sb.append(Tqxx + ",");
125 }
126 if (strLine.indexOf("alt") > 0) {
127 Tqxx = subString(strLine, "alt", ">");
128 Tqxx = Tqxx.substring(1);
129 sb = sb.append(Tqxx + ",");
130 }
131 if (strLine.indexOf("strong") > 0) {
132 strLine = strLine.replaceAll(" ", "");
133 Tqxx = subString(strLine, "strong>", "<");
134 String Tqxx1 = subString(strLine, "-", "</");
135 Tqxx1 = Tqxx1.substring(8);
136 Tqxx = Tqxx + "~" + Tqxx1;
137 sb = sb.append(Tqxx + ",");
138 }
139 return sb.toString();
140
141 }
142
143 /*
144 * 返回在 strSourc 的 strStart ,strEnd 之間的字符串
145 *
146 */
147 private String subString(String strSource, String strStart, String strEnd) {
148 strSource = strSource.toUpperCase();
149 strStart = strStart.toUpperCase();
150 strEnd = strEnd.toUpperCase();
151 int intStart = strSource.indexOf(strStart);
152 int intEnd = strSource.indexOf(strEnd, intStart);
153 String strRetu = " ";
154 if (intStart == -1)
155 return strRetu;
156 if ((intEnd != -1) && (intEnd > intStart)) {
157 strRetu = strSource.substring(intStart + strStart.length(), intEnd);
158 } else {
159 strRetu = strSource.substring(intStart + strStart.length());
160 }
161 return strRetu.trim();
162 }
163
164 public ParseHtml() {
165
166 }
167
168 public static void main(String args[]) {
169 ParseHtml p = new ParseHtml();
170 p.run();
171 }
172 }
173
當用jxl包操作excel文件的時候,在拷貝大批量的單元格的時候會發生錯誤,信息如下:
2 jxl.biff.IndexMapping.getNewIndex(IndexMapping.java:68)
3 jxl.biff.FormattingRecords.rationalize(FormattingRecords.java:372)
4 jxl.write.biff.WritableWorkbookImpl.rationalize(WritableWorkbookImpl.java:727)
5 jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:489)
這個錯誤曾花了我不少時間,為了避免這個錯誤,我曾試過把一個excel報表中的紀錄拆分成好幾部分分別進行處理,效率可想,非常的慢,非常的煩人,后來,偶爾在網上看到有人建議看看它的源代碼,也許能更好的理解它,死當活馬醫,下了源代碼,為了能夠更清楚地調試和跟蹤,我把jxl中的src下的源程序直接導到了工程里進行調試,結果發現這個錯誤是在jxl.biff下的formatting records.java這個類中出的問題,它定義了一個變量private static final int maxFormatRecordsIndex = 0x1b9;即最大紀錄格式數目為441,因此每當拷貝的單元格超過這個變量值的時候就會報錯,解決的方法就是把這個0x1b9換成一個大點的值,即可,我換成了7200基本滿足了需要,沒有再報這個錯,而且以往復制單元格,單元格格式丟失的情況也沒有再出現,問題完全解決!
教訓:對于現成的東西,已經做好的東西,要敢于去研究,去質疑,尤其是開源的東西,因為都是為了個人的使用,其中難免有些東西,對于我們自己的項目來說不太合適,找到它的源代碼,大概一跟蹤,基本上問題就能解決,以前的時候,總是感覺自己的水平菜,總認為別人的東西都是對的,結果導致問題一直拖到現在,親自動手實踐,永遠是最好的方法!









