<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[专注于Flash RIA与网络游戏开发 - 出错解决档案]]></title>
<link>http://www.sujun.org/</link>
<description><![CDATA[弃天笑的小窝]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[sujun10@21cn.com(弃天笑)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>专注于Flash RIA与网络游戏开发</title> 
	<url>http://www.sujun.org/images/logos.gif</url> 
	<link>http://www.sujun.org/</link> 
	<description>专注于Flash RIA与网络游戏开发</description> 
</image>

			<item>
			<link>http://www.sujun.org/default.asp?id=53</link>
			<title><![CDATA[Cruisecontrol相关问题]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[出错解决档案]]></category>
			<pubDate>Mon,06 Sep 2010 09:47:47 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=53</guid>	
		<description><![CDATA[用cruisecontrol来发布项目以及编译程序好一阵了，总结了一下相关问题，当初自己也遇到过的，希望对大家有帮助<br/><br/>1.cruisecontrol编译swf问题<br/>如果直接对相对路径的话，会报&nbsp;mxmlc错误:&nbsp;无法打开“src“<br/>这里mxmlc很奇怪，直接用ant编译的话，这个build.xml文件是没错的。但是如果采用cruisecontrol来自动编译的话，就会出错上面的错啦。既然是路径问题，那就改成绝对路径。<br/>经过测试发现，只需要在&lt;mxmlc&gt;&lt;/mxmlc&gt;字段中的file属性和source-path属性路径需要修改以外，其他地方不一样，可以正常编译通过。<br/>（当然，也可以取相对路径，但是必须加上projects/游戏项目名称/src）。比其他地方，在src面前增加了projects/游戏项目名称。<br/>这里我估计是ant的问题，我采用EditPlus里编译build，可以看成ant和build在同一个目录，所以路径不会出现问题。但是在projects/游戏项目名称中，ant是和projects同个级别的目录。所以需要特别指明路径。（这里有点奇怪的是，编译java却不会出现这个问题）<br/><br/>2.用ant编译flash的swc时，有时会造成Java&nbsp;heap&nbsp;space错误。检查一下，发现是编译时读取了太多的flex的swc，根据需要去掉一些没用的swc就可以。例如编译纯as3项目，只需要导入playerglobal.swc就可以了。当然，你也通过设置jvm虚拟机的Heap值。<br/><br/>3.svn错误<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>net.sourceforge.cruisecontrol.CruiseControlException:&nbsp;svn&nbsp;failed&nbsp;with&nbsp;exception<br/><br/>at&nbsp;net.sourceforge.cruisecontrol.util.CommandExecutor.executeAndWait(Com<br/>mandExecutor.java:115)<br/><br/>at&nbsp;net.sourceforge.cruisecontrol.util.Commandline.executeAndWait(Command<br/>line.java:617)<br/><br/>at&nbsp;net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper.bootstrap<br/>(SVNBootstrapper.java:134)<br/><br/>at&nbsp;net.sourceforge.cruisecontrol.Project.bootstrap(Project.java:760)<br/><br/>at&nbsp;net.sourceforge.cruisecontrol.Project.build(Project.java:192)<br/>[code]<br/><br/>解决方法：原因是你的命令行不能执行SVN命令，所以装一个subversion就可以解决了,希望使用的subversion版本新一点，要不然还会报版本过旧的错误。&nbsp;注意，千万不要去弄客户端的TortoiseSVN<br/><br/>4.<br/>[code]<br/>&lt;bootstrappers&gt;<br/>&#160;&#160;&#160;&#160;&lt;svnbootstrapper&nbsp;localWorkingCopy=&#34;projects/${project.name}/src&#34;&nbsp;/&gt;<br/>&nbsp;&lt;/bootstrappers&gt;<br/></div></div><br/><br/>注意，这里<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;svnbootstrapper&nbsp;localWorkingCopy=&#34;projects/${project.name}/src&#34;&nbsp;/&gt;<br/>[code]<br/>和<br/>[code]<br/>&nbsp;&lt;modificationset&nbsp;quietperiod=&#34;30&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;svn&nbsp;localWorkingCopy=&#34;projects/${project.name}/src&#34;/&gt;<br/>&lt;/modificationset&gt;<br/></div></div><br/>中指定的目录，必须是一个svn目录。不然会包svn:&nbsp;&#39;.&#39;&nbsp;is&nbsp;not&nbsp;a&nbsp;working&nbsp;copy的错误，可以继续执行，这时你的build.xml如果也有svn的话，也是可以正常进行的<br/>同时，这里指定了svn，那么在项目的build.xml中，就不需要增加svn的设置了]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=45</link>
			<title><![CDATA[cinnamon请求服务错误]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[出错解决档案]]></category>
			<pubDate>Sun,22 Mar 2009 07:14:27 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=45</guid>	
		<description><![CDATA[测试了一下以前写的cinnamon例子，修改了一下配置文件。突然发现例子连接不上服务器了。<br/>突然如下的提示<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>-----ERROR----:Unknown&nbsp;service:&nbsp;counter&nbsp;-&nbsp;request&nbsp;info:&nbsp;Request<br/>&nbsp;service&nbsp;name&nbsp;=&nbsp;counter<br/>&nbsp;operation&nbsp;name&nbsp;=&nbsp;getNextValue<br/>&nbsp;parameter&nbsp;types&nbsp;=&nbsp;[]<br/></div></div><br/>很明显是找不到网络服务器<br/><br/>这里也指出了&nbsp;&nbsp;service&nbsp;name&nbsp;=&nbsp;counter<br/><br/>看了一下配置文件，原来是这样配置的<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&lt;service&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=&#34;CounterService&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory-ref=&#34;pojo&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service-interface=&#34;example.CounterService&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service-implementation=&#34;example.CounterServiceImpl&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope=&#34;session&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br/></div></div><br/>发现服务名是CounterService<br/>修改回counter，正常连接<br/>回头把测试代码放上]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=43</link>
			<title><![CDATA[[Java]Hibernate保存或者更新VO遇到same identifier value问题]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[出错解决档案]]></category>
			<pubDate>Tue,17 Feb 2009 22:28:22 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=43</guid>	
		<description><![CDATA[最近在使用到了hibernate更新一个VO遇到了这个问题<br/>a&nbsp;different&nbsp;object&nbsp;with&nbsp;the&nbsp;same&nbsp;identifier&nbsp;value&nbsp;was&nbsp;already&nbsp;associated&nbsp;with&nbsp;the&nbsp;session<br/>当<br/>session.up&#100;ate(vo);<br/>就提示上面的错误。是Nhibernate里头，在同一个Session里，数据库的一条记录，只能对应一个引用。如果程序中有其他的对象（这个对象不是由这个Session&nbsp;从数据库取得的，叫脱管实体，和Session中某一对象的数据库标识符相同）由这个Session保存。就会报这个错，目的在于保证不出现不一致读的问题。<br/><br/>仔细想了一下也是，因为数据是从Flex客户端传过去的，我是修改用户数据，之前用这个用户数据登陆了。<br/>知道了问题所在，只要清楚掉session的一些数据就没问题了<br/>session.clear();<br/>使用了这个方法后再更新数据，成功解决问题。<br/><br/>后来再网上搜索一下，发现很多人也提出了问题。下面是一个人的总结<br/><a target="_blank" href="http://blog.csdn.net/piggerman/archive/2008/08/21/2804556.aspx">http://blog.csdn.net/piggerman/archive/2008/08/21/2804556.aspx</a><br/><br/>最后他所的几种方法：<br/>Hibernate&nbsp;疑难异常及处理<br/><br/>1、a&nbsp;different&nbsp;object&nbsp;with&nbsp;the&nbsp;same&nbsp;identifier&nbsp;value&nbsp;was&nbsp;already&nbsp;associated&nbsp;with&nbsp;the&nbsp;session。<br/><br/>　　错误原因：在hibernate中同一个session里面有了两个相同标识但是是不同实体。<br/><br/>　　解决方法一：session.clean()<br/><br/>　　PS：如果在clean操作后面又进行了saveOrUp&#100;ate(object)等改变数据状态的操作，有可能会报出&#34;Found&nbsp;two&nbsp;representations&nbsp;of&nbsp;same&nbsp;collection&#34;异常。<br/><br/>　　解决方法二：session.refresh(object)<br/><br/>　　PS：当object不是数据库中已有数据的对象的时候，不能使用session.refresh(object)因为该方法是从hibernate的&nbsp;session中去重新取object，如果session中没有这个对象，则会报错所以当你使用saveOrUp&#100;ate(object)之前还需要判断一下。<br/><br/>　　解决方法三：session.merge(object)<br/><br/>　　PS：Hibernate里面自带的方法，推荐使用。<br/><br/>2、Found&nbsp;two&nbsp;representations&nbsp;of&nbsp;same&nbsp;collection<br/><br/>　　错误原因：见1。<br/><br/>　　解决方法：session.merge(object)<br/><br/>以上两中异常经常出现在一对多映射和多对多映射中<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=42</link>
			<title><![CDATA[[AS3]Cinnamon远程方法调用参数错误]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[出错解决档案]]></category>
			<pubDate>Mon,19 Jan 2009 22:22:57 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=42</guid>	
		<description><![CDATA[因为有点大意，远程调用方法的时候，在客户端发送时写错了一个参数造成的错误。<br/>主要是因为远程服务那边新增一个方法，所以客户端对应的方法不是用工具生成的，自己手工写时写错。<br/>是这样，远程的方法是这个<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public&nbsp;boolean&nbsp;addMoreVo(AfficheVo&nbsp;afficheVo,&nbsp;ArrayList&lt;RoomVo&gt;&nbsp;roomVos);<br/></div></div><br/><br/>然后客户端的对应的实现类写新方法的时候写成了这样<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public&nbsp;function&nbsp;addMoreVo(afficheVo:AfficheVo,&nbsp;roomVos:Array):ServiceRequest<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;cinnamon::getOperation(&#34;addMoreVo&#34;).execute([AfficheVo,&nbsp;roomVos]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/>注意execute方法的AfficheVo参数，这样写的后果是提示下面的错误信息：<br/><br/>ERROR:No&nbsp;suitable&nbsp;service&nbsp;method&nbsp;for&nbsp;request:&nbsp;Request<br/>&nbsp;service&nbsp;name&nbsp;=&nbsp;HandlerVoServices<br/>&nbsp;operation&nbsp;name&nbsp;=&nbsp;addMoreVo<br/>&nbsp;parameter&nbsp;types&nbsp;=&nbsp;[java.util.HashMap,java.util.ArrayList]<br/><br/>提示服务器没有addMoreVo这个方法，起初觉得很奇怪，以为是没更新到，确定了一下不是。<br/>看它这里提示应该是参数错误，java.util.HashMap，这里于服务器对应的AfficheVo不一样，一直觉得很奇怪，怎么会出现这个错误呢？<br/><br/>我客户端传的是一个VO，而不是一个Object，怎么会和服务器的MAP对应呢？<br/><br/>不过参数错误，造成远程方法调用是肯定的，仔细检查了几遍，才发现客户端这里<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>cinnamon::getOperation(&#34;addMoreVo&#34;).execute([AfficheVo,&nbsp;roomVos]);<br/></div></div><br/>竟然在需要传vo实例的地方，竟然直接传了class了（AfficheVo是一个class），<br/><br/>修正错误.....<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>cinnamon::getOperation(&#34;addMoreVo&#34;).execute([afficheVo,&nbsp;roomVos]);<br/></div></div><br/><br/>最后得到:flash里的class在服务器没有对应，所以当作object看到。。。映射到java的HashMap对象了<br/>所以写程序必须小心....排除错误也要一步一步观察]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=19</link>
			<title><![CDATA[[AS3\C++]flash与C++通讯遇到字节问题]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[出错解决档案]]></category>
			<pubDate>Mon,10 Mar 2008 19:26:26 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=19</guid>	
		<description><![CDATA[记录....<br/>在一次开发项目过程中，（Flash的socket与c++的进行二进制数据通讯），之前一直是通讯正常，在flash与c++之间正常收发结构<br/>但是在一次更新了服务器后，却发现flash接受了一下C++服务器发送过来的数据没有反应<br/>一开始以为是C++更新出现了问题，但是把C++的测试客户端拿过来却能正常运行<br/>那么问题是flash客户端，可是换上旧的服务器，却能正常运行。<br/><br/>提示连接成功到服务器，服务器也确实发出了数据....那么问题是在收数据这里<br/>虽然怀疑服务器也有问题，但还是先从客户端调器<br/><br/>打开CS3的调试，仔细看网络层的数据，发现用户连接成功后接受房间列表的时候，收到的字节数与服务器发送过来的字节大小一样。那么就有可能flash网络层解析数据的问题.<br/>可是问题旧的服务器又完全正常呢？<br/>检查了一下，还是找不到问题的所在。只好对网络层做深的解析，在调试器里，从消息头开始分析起，然后读了多少字节，就减去多少字节，进行手工计算<br/><br/>终于在消息头那里发现了问题，在消息头里服务器告诉了我后面的的消息长度是256，但是实际传给我的实际长度却只有250，问题就出现在这里......<br/><br/>服务器的问题......结果仔细一检查，服务器代码也没问题。那么问题就是在结合同事写的C++连接数据的问题了<br/><br/>最后终于查出是因为VC编译器的问题。它会有自动补齐字节数的问题。也就是说，如果它遇到一个字节，会自动换成int，也就是四个字节来计算，但是实际发出去却没有变换。这样就造成发送的数据与申明的字节数不符合<br/><br/>最后的解决办法是，直接在收到总的消息里，直接减去消息头的数据，就完全解决了........<br/><br/>var&nbsp;bytes:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>socket.readBytes(bytes,&nbsp;0,&nbsp;msgAllLen&nbsp;-&nbsp;16);]]></description>
		</item>
		
</channel>
</rss>