2007年4月29日
当创建一个JSP文件或者编辑一个JSP文件时报错,具体信息:
org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:3374)
at org.eclipse.swt.SWT.error(SWT.java:3297)....
解决方法:将jsp的默认打开方式改成代码试图:
window---->perferences----->General------->editors------>file associations
选择jsp------->选择相应的editor 为default。也就是把myeclispe jsp editor 设为default(而不是myeclispe visual jsp editor)。
在销售定单中进行定价的时候报:定价错误,丢失必要条件 MWST,可用VK11,维护条件MWST和MWSI。
物资在报废时,采用移动类型555,提示移动类型555与总账科目XXX价值串字段不一致,这样的错误,可到后台对移动类型555的相关字段进行设置,比如这里系统标准的移动类型555其中,成本中心这个字段是必输的,需要将其改为隐去、或选择输入,进入SPRO->物料管理->库存管理和实际库存->发货/转储记账->定义屏幕格式,选中双击,即可进入,选择相关的字段即可。
在做发票校验时提示"请维护容差码BW的容差限制",或者"请维护容差码BD的容差限制"等等类似相关的信息时,可到后台配置omr6,维护视图 容差限制,复制新增相关公司下的容差选项,保存即可。
采购订单修改历史查看,可通过me23n,进去之后,环境-->表头更改/项目更改,来查看订单的操作历史
定制本地布局 该项,则可定义常用的快捷方式,右键快速复制的功能,需要选中 快捷剪切和粘贴 该项
定制本地布局-->选项-->专家-->控件,在所有下拉列表中显示键值 勾选,可显示各下拉列表的参数值
定制本地布局-->选项-->本地数据,设置操作历史数据,即在输入文本上打空格之后,会在相应位置上显示输入过的所有数据
菜单界面-->设置-->显示技术参数 勾选,可在所有的菜单事务前,显示事务代码
su3 个人参数设置,默认 里可设置默认打印参数,不必每次都去选定打印机等参数信息。
在做物资移动的时候,产生**科目有问题,一般都是财务的总账科目有问题,此时,可用fs00,来设置总账科目的属性,常用的选项有 本位币余额、自动过账。
在对采购订单进行收货的过程中,出现了这个问题,后来在网上找到这样的解决方法:
采用T-CODE SM30--->T169P表维护一下该条目即可,看情况是发票校验之类没有设置好造成的问题。
好久没有来了,从原单位辞职以后,到这边来,做sap内部顾问,做业务,大半年也没有动过代码了,有同事羡慕,不用天天加班了,但自己心里真的还是空荡荡的,曾经给自己爱与恨的代码,就这样拜拜了么?
从另一面讲,也给自己一个尝试吧,权当锻炼一下自己其他方面的能力,对公司来讲,哪里需要我,我就去哪里吧,毕竟老板赏识了,才有自己的价值么,干什么,我想对我来说都是一种帮助,一种积累吧!
1、无法安装,提示挂起,要求重启机器,但重启之后,依然如此。
原因:是安装程序在先前的安装过程中在系统注册表留下某些信息,导致不能安装。
解决方法:在运行窗口输入regedit,打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager中找到PendingFileRenameOperations,删除该键值(这个键值是安装程序暂挂项目,只要找到对应的应用程序清除掉就行了),关闭注册表编辑器。重新安装即可。
2、外面的客户端无法连接到服务器,而服务器本地打开数据库一切正常。
原因及解决方法:服务器端的监听端口没有打开,在dos命令下, 使用netstat -an查看端口,没有默认的1433监听端口,windows server的操作系统该端口默认是关闭的,必须要打相应的补丁,目前最新的是sp4。
首先发现的问题是${aaa},像这样的标签无法解析,当在页面上添加这样的标签声明的时候
<%@ taglib prefix="c" uri= "http://java.sun.com/jstl/core "%>
貌似所有的<c:out诸如此类的都可以使用了,但并不是真的我们引入的jstl包和standar包都起作用了,因为像这样的${aaa}标签还是无法解析的,说明引用还有问题。
在web文件中我们注册了这些tag,诸如
1 <taglib>
2 <taglib-uri>/tags/c</taglib-uri>
3 <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
4 </taglib>
所有的tld文件都放在web-inf下面,在页面上引用这些标签的时候如
<%@ taglib uri="/tags/c" prefix="c" %>
会发现c标签全部都无法解析,而换成
<%@ taglib prefix="c" uri= "http://java.sun.com/jstl/core "%>
的时候还可以,说明这些标签文件还是没有引用成功,什么原因呢,这个问题折腾了我一天,因为web工程的web.xml文件头声明的servlet版本有问题,在eclipse中默认的web.xml是没有版本定义的文件头的,默认的版本应该是servlet2.3,当我们添加如下声明的时候
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
同时,需要修改一下web.xml文件中对应的出现红线的地方,在tag声明部分也需要加上<jsp-config>标签,如下所示:
<jsp-config>
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
</jsp-config>
ok,运行,正常!
另,我用的jstl和standar都是1.1.2版本的
我经常用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程序和服务启用数据执行保护 即可。确定,重启机器,一切正常,顺利进入游戏!
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZ)V
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,致敬!哈哈!
碰到一个问题,在转换类型时,Long.valueof(0),即将int类型转换成Long类型时,在eclipse里不提示错误,但在实际转换过程中会出错,当改成Long.valueof("0"),就不会出现错误,似乎,Long.valueof()只支持String类型的转换。
以前写过的一个从网上提取天气信息的类,参照了公司老前辈们的代码,可能不太规范,但基本实现,主要就是对页面源码的解析和有用信息的截取,取出来得都是有规律的字符串信息,可根据需要存进数据库,进行应用。代码如下:
1 package parsehtml;
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文件的时候,在拷贝大批量的单元格的时候会发生错误,信息如下:
1 java.lang.ArrayIndexOutOfBoundsException: 441
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基本满足了需要,没有再报这个错,而且以往复制单元格,单元格格式丢失的情况也没有再出现,问题完全解决!
教训:对于现成的东西,已经做好的东西,要敢于去研究,去质疑,尤其是开源的东西,因为都是为了个人的使用,其中难免有些东西,对于我们自己的项目来说不太合适,找到它的源代码,大概一跟踪,基本上问题就能解决,以前的时候,总是感觉自己的水平菜,总认为别人的东西都是对的,结果导致问题一直拖到现在,亲自动手实践,永远是最好的方法!