﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-sunfruit[请访问http://www.fruitres.cn]-随笔分类-JAVA SE &amp; EE</title><link>http://www.blogjava.net/sunfruit/category/7555.html</link><description>--我相信JAVA能走得更远 QQ:316228067</description><language>zh-cn</language><lastBuildDate>Fri, 21 Mar 2008 14:57:24 GMT</lastBuildDate><pubDate>Fri, 21 Mar 2008 14:57:24 GMT</pubDate><ttl>60</ttl><item><title>Swift GIS--稳定、自主、高效</title><link>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 21 Mar 2008 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/187758.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/187758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/187758.html</trackback:ping><description><![CDATA[<script src="http://221.122.41.10/rmcomserver/ltmap/ltmap.js"></script><script type="text/javascript">
        var initMap;
        var mapListener = new MapListener();
        mapListener.onClick = function(geoPoint){
            //业务
            //pointId, geoPoint, color, size, opacity, caption, captionFontColor, captionBgColor, captionOpacity){
            var p = new Point(1, geoPoint, '#0000ff', 10, .6, '测试点', '#000000', '#FFFF00', .6);
            initMap.addPoint(p);
        }
            
        mapListener.onMouseMove = function(geoPoint){
            window.status = "lon="+geoPoint.x+"; lat="+geoPoint.y;
        }
        
        function win_load(){
            initMap = new initMap('map', '221.122.41.10', '80'); 
            initMap.addPanZoomBar(5, 5);
            //initMap.addOverviewMap();
            //*****初始化地图控制面板*****
            initMap.addControlPanel(60, 20);
            
            initMap.controlPanel.all[0].onclick = function(){initMap.drag();};
            initMap.controlPanel.all[1].onclick = function(){initMap.zoomIn();};
            initMap.controlPanel.all[2].onclick = function(){initMap.zoomOut();};           
            initMap.controlPanel.all[3].onclick = function(){initMap.getDistance();};           
            initMap.controlPanel.all[4].onclick = function(){initMap.onPoint('onPoint1');};         
            initMap.controlPanel.all[5].onclick = function(){initMap.onRect('onRect1');};
            initMap.controlPanel.style.width = '370px';
            //*************************
        }
        function onPoint1(geoPoint){
            var p = new Point(1, geoPoint, '#0000ff', 10, 1, '测试点', '#000000', '#FFFF00', .6);
            initMap.addPoint(p);
        }
        function onRect1(geoRect){
            var rectArea = new RectArea(1, geoRect, '#00ff00', 0.5, '#0000ff', 1);
            initMap.addRect(rectArea);
        }
        function win_unload(){
            initMap.listenerAgent.removeListener(mapListener);
        }
        //点操作
        function addPoint(){
            var lon = OpenLayers.Util.getElement('addPointLon').value;
            var lat = OpenLayers.Util.getElement('addPointLat').value;
            var geoPoint = new GeoPoint(parseFloat(lon), parseFloat(lat));
            var p = new Point(1, geoPoint, '#0000ff', 10, 1, '中文中文中文中文', '#FFFF00', '#00FF00', 1);
            initMap.addPoint(p);
        }
        function deletePoint(){
            initMap.deletePoint(1);
        }
        function clearPoint(){
            initMap.clearPoint();
        }
        //线操作
        function addLine(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            
            var pointArr = str.split(",");
            var points = new Array();
            for(var i = 0; i < pointArr.length; i+=2){
                points.push(new GeoPoint(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
            }
            
            var line = new Line(1, points, '#000000', 4, 1);
            initMap.addLine(line);
        }
        function deleteLine(){
            initMap.deleteLine(1);
        }
        function clearLine(){
            initMap.clearLine();
        }
        //圆形操作
        var regularPolygonFeature;
        function addCircle(){
            lon = OpenLayers.Util.getElement('addCircleLon').value;
            lat = OpenLayers.Util.getElement('addCircleLat').value;
            radius = OpenLayers.Util.getElement('addPointRadius').value;
            
            var geoCircle = new GeoCircle(parseFloat(lon), parseFloat(lat), parseFloat(radius));
            var circleArea = new CircleArea(1, geoCircle, '#00ff00', 0.5, '#0000ff', 1);
            //alert(circleArea);
            initMap.addCircle(circleArea);          
        }
        function deleteCircle(){
            initMap.deleteCircle(1);
        }
        function clearCircle(){
            initMap.clearCircle();
        }
        //矩形操作
        function addRect(){
            var left = OpenLayers.Util.getElement('addRectLeft').value;
            var top = OpenLayers.Util.getElement('addRectTop').value;
            var right = OpenLayers.Util.getElement('addRectRight').value;
            var bottom = OpenLayers.Util.getElement('addRectBottom').value;
            
            if(left != null && left != '' && top != null && top != '' && right != null && right != '' && bottom != null && bottom != ''){
                var geoRect = new GeoRect(parseFloat(left), parseFloat(top), parseFloat(right), parseFloat(bottom));
                var rectArea = new RectArea(1, geoRect, '#00ff00', 0.5, '#0000ff', 1);
                initMap.addRect(rectArea);
            }
        }
        
        function deleteRect(){
            initMap.deleteRect(1);
        }
        function clearRect(){
            initMap.clearRect();
        }
        //多边形
        function addPolygon(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var nPoints = new Array();
                for(var i = 0; i < pointArr.length; i+=2){
                    nPoints.push(new OpenLayers.Geometry.Point(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
                }
                var polygonArea = new PolygonArea(1, nPoints, '#0000ff', 0.1, '#0000ff', 2);
                initMap.addPolygon(polygonArea);
            }
        }
        function deletePolygon(){
            initMap.deletePolygon(1);
        }
        function clearPolygon(){
            initMap.clearPolygon();
        }
        //标记和弹出窗口
        function addMarker(){
            var str = OpenLayers.Util.getElement('popupPosition').value;
            var pointArr = str.split(",");
            var marker = new Marker(1, new GeoPoint(parseFloat(pointArr[0])-.2, parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '<center><a href="http://www.baidu.com" target="_blank">百度</a></center>', '测试POI1', '#000000', '#DDD', .8, false);
            initMap.addMarker(marker);
            
            var marker2 = new Marker(2, new GeoPoint(parseFloat(pointArr[0]), parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '<center><a href="http://www.baidu.com" target="_blank">百度</a></center>', '测试POI2', '#000000', '#DDD', .8, true);
            initMap.addMarker(marker2);
            
            var marker3 = new Marker(3, new GeoPoint(parseFloat(pointArr[0])+.2, parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '', '测试POI3', '#000000', '#DDD', .8, true);
            initMap.addMarker(marker3);
        }
        
        function deleteMarker(){
            initMap.deleteMarker(1);
        }
        function clearMarker(){
            initMap.clearMarker();
        }
        //弹出窗口
        function addPopup(){
            var str = OpenLayers.Util.getElement('popupPosition').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var p = new GeoPoint(parseFloat(pointArr[0]), parseFloat(pointArr[1]));
                var popup = new Popup(1, p, .9, '<center>北京灵图技术有限公司</center><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><center>灵图</center>', 272, 170 , true);                         
                initMap.addPopup(popup);
            }
        }
        function deletePopup(){
            initMap.deletePopup(1);
        }
        function clearPopup(){
            initMap.clearPopup();
        }
       
        function addScale(){
            initMap.addScale();
        }
        function getScale(){
            var obj = OpenLayers.Util.getElement('scaleId');
            obj.value = initMap.getScale();
        }
        function removeScale(){
            initMap.removeScale();
        }
        function addPanZoomBar(){
            initMap.addPanZoomBar(5, 5);
        }
        function removePanZoomBar(){
            initMap.removePanZoomBar();
        }
        function addListener(){
            initMap.listenerAgent.addListener(mapListener);
        }
        function removeListener(){
            initMap.listenerAgent.removeListener(mapListener);
        }
        
        function setCenter() {
            var center = new GeoPoint(106.5220,29.5616);
            initMap.setCenter(center);
        }
        function getCenter(){ alert(initMap.getCenter()); }
        function addSelectFeature(){ initMap.addSelectFeature(); }
        function zoomOut(){ initMap.zoomOut(); }
        function drag(){ initMap.drag(); }
        function addLonLat(){ initMap.addLonLat(); }
        function setMapByRect(){ 
            geoRect = new GeoRect(106.4253,29.5725,106.6100,29.4756);
            initMap.setMapByRect(geoRect);
        }
        function setMapByPoints(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var nPoints = new Array();
                for(var i = 0; i < pointArr.length; i+=2){
                    nPoints.push(new OpenLayers.Geometry.Point(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
                }
                initMap.setMapByPoints(nPoints);
            }   
        }
        var floatPopup, floatPopup1, floatPopup2;
        function addFloatPopup(){
            var jsContent = "<strong>第一个弹出窗口内容</strong><br /><center><input type=\"button\" value=\"弹出第二个窗口\" onclick=\"test1()\" /></center>";
            floatPopup = new creatPopup('aaa', 200, 230, 244, 386, '第一个窗口', jsContent);
            //alert(floatPopup);
        }
         function addFloatPopup1(){
            var jsContent = "<strong>第一个弹出窗口内容</strong>";
            creatPopup('aaa', 400, 430, 244, 386, '测试窗口', jsContent);
        }
        function test1(){
            creatPopup('bbb', 100, 130, 440, 250, '第二个窗口', '<center>内容</center>');
        }
        
        function closePopup_LP(id){
            closeFloatPopup(id);
        }
        
        function zoomIn(){
            initMap.zoomIn();
        }
        function zoomOut(){
            initMap.zoomOut();
        }
        function getDistance() {
            initMap.getDistance();
        }
        /*********需要回调的函数**********/
        function clearRect(){
            initMap.clearRect();
        }
        function eventAgent(evt) {
            initMap.eventAgent(evt);
        }
        /*******************************/
    </script>
<div style="border-right: black 1px solid; border-top: black 1px solid; border-left: black 1px solid; width: 640px; border-bottom: black 1px solid; height: 480px">
<div id="map" style="width: 100%; height: 100%"></div>
</div>
<form action="" method="post">
    <!--   <input type="text" value="" name="loggers" size="100" /> --><!--<input type=button value='清除' onclick='document.getElementById("loggers").value=""'/ /><br/ />
    <textarea rows="5" cols="150" id="loggers"></textarea>
 -->
    <table width="1024" border="1">
        <tbody>
            <tr>
                <td width="152">地图操作</td>
                <td colspan="2"><input onclick="initMap.drag();" type="button" value="移动" name="drag" /> <input onclick="initMap.zoomIn()" type="button" value="放大" name="zoomIn" /> <input onclick="initMap.zoomOut()" type="button" value="缩小" name="zoomOut" />&nbsp;&nbsp;&nbsp; <input onclick="initMap.getDistance()" type="button" value="测距" name="line" /> <input onclick="initMap.getArea()" type="button" value="测面" name="polygon" />&nbsp;&nbsp;&nbsp; <input onclick="setCenter()" type="button" value="设中心" name="" /> <input onclick="getCenter()" type="button" value="取中心" name="" />&nbsp;&nbsp;&nbsp; <input onclick="setMapByRect()" type="button" value="设置地图(rect)" name="" /> <input onclick="setMapByPoints()" type="button" value="设置地图(points)" name="" /> </td>
            </tr>
            <tr>
                <td width="152">点、线</td>
                <td colspan="2"><input value="106.5220" name="addPointLon"  type="text" /> <input value="29.5616" name="addPointLat"  type="text" /> <input onclick="addPoint()" type="button" value="加点" /> <input onclick="deletePoint()" type="button" value="删点" /> <input onclick="clearPoint()" type="button" value="清点" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="addLine()" type="button" value="加线" name="" /> <input onclick="deleteLine()" type="button" value="删线" name="" /> <input onclick="clearLine()" type="button" value="清线" name="" /> </td>
            </tr>
            <tr>
                <td rowspan="3">多边形</td>
                <td>圆</td>
                <td>中心 <input size="12" value="106.5220" name="addCircleLon"  type="text" /> <input size="12" value="29.5616" name="addCircleLat"  type="text" /> 半径 <input id="addPointRedius" size="12" value="0.09" name="addPointRadius"  type="text" /> <input onclick="addCircle()" type="button" value="加圆" name="" /> <input onclick="deleteCircle()" type="button" value="删圆" name="" /> <input onclick="clearCircle()" type="button" value="清圆" name="" /></td>
            </tr>
            <tr>
                <td>矩形</td>
                <td>左上 <input id="addRectLeft" size="12" value="106.4253" name="addRectLeft"  type="text" /> <input id="addRectTop" size="12" value="29.5725" name="addRectTop"  type="text" /> 右下 <input id="addRectRight" size="12" value="106.6100" name="addRectRight"  type="text" /> <input id="addRectBottom" size="12" value="29.4756" name="addRectBottom"  type="text" /> <input onclick="addRect()" type="button" value="加矩形" name="" /> <input onclick="deleteRect()" type="button" value="删矩形" name="" /> <input onclick="clearRect()" type="button" value="清矩形" name="" /></td>
            </tr>
            <tr>
                <td width="62">多边形</td>
                <td width="788"><input id="addPolygonPoints" size="68" value="106.5220,29.5616,106.4253,29.5725,106.5726,29.616" name="addPolygonPoints"  type="text" /> <input onclick="addPolygon()" type="button" value="加多边形" name="" /> <input onclick="deletePolygon()" type="button" value="删多边形" name="" /> <input onclick="clearPolygon()" type="button" value="清多边形" name="" /> </td>
            </tr>
            <tr>
                <td width="152">标记(marker)</td>
                <td colspan="2"><input onclick="addMarker()" type="button" value="加标记" name="" /> <input onclick="deleteMarker()" type="button" value="删标记" name="" /> <input onclick="clearMarker()" type="button" value="清标记" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input id="popupPosition" value="106.4230,29.5616" name="popupPosition"  type="text" /> <input onclick="addPopup()" type="button" value="加弹出窗口" name="" /> <input onclick="deletePopup()" type="button" value="删弹出窗口" name="" /> <input onclick="clearPopup()" type="button" value="清弹出窗口" name="" />&nbsp;&nbsp;&nbsp;&nbsp; </td>
            </tr>
            <tr>
                <td width="152">滑动条(PanZoomBar)</td>
                <td colspan="2"><input onclick="addPanZoomBar()" type="button" value="添滑动条" name="" /> <input onclick="removePanZoomBar()" type="button" value="删滑动条" name="" />&nbsp;&nbsp; <input onclick="addLonLat()" type="button" value="添经纬度" name="" />&nbsp;&nbsp; <input onclick="initMap.addOverviewMap()" type="button" value="添鹰眼" name="" /> <input onclick="initMap.deleteOverviewMap()" type="button" value="删鹰眼" name="" /> </td>
            </tr>
            <tr>
                <td width="152">比例尺(scale)</td>
                <td colspan="2"><input id="scaleId" name="scaleId"  type="text" /> <input onclick="getScale()" type="button" value="取比例尺" name="" /> <input onclick="addScale()" type="button" value="添比例尺" name="" /> <input onclick="removeScale()" type="button" value="删比例尺" name="" /> </td>
            </tr>
            <tr>
                <td width="152">地图属性</td>
                <td colspan="2"><input onclick="alert(initMap.getViewSize());" type="button" value="窗口大小" name="" /> <input onclick="alert(initMap.getMapSize());" type="button" value="地图大小" name="" /> </td>
            </tr>
            <tr>
                <td width="152">事件</td>
                <td colspan="2"><input onclick="initMap.drag();addListener()" type="button" value="添加监听" name="" /> <input onclick="removeListener()" type="button" value="删除监听" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="initMap.onRect('onRect1')" type="button" value="画框" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="initMap.onPoint('onPoint1')" type="button" value="点选" name="" /> </td>
            </tr>
            <tr>
                <td width="152">其它</td>
                <td colspan="2"><input onclick="addFloatPopup()" type="button" value="浮动窗口A" name="" /> <input onclick="addFloatPopup1()" type="button" value="浮动窗口B" name="" /> <input onclick="closePopup_LP('aaa')" type="button" value="关闭窗口A" name="" /> <input onclick="closePopup_LP('bbb')" type="button" value="关闭窗口B" name="" /> </td>
            </tr>
        </tbody>
    </table>
</form>
<script>
    //initMap.addOverviewMap();
    win_load();
</script>    <img src ="http://www.blogjava.net/sunfruit/aggbug/187758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2008-03-21 17:48 <a href="http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Applet上叠加层的解决方案(非div)</title><link>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 29 Dec 2007 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/171555.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/171555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/171555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
<br />
&nbsp;&nbsp;&nbsp; 在applet上叠加层有2种方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;第一：使用iframe的方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;第二：使用window.createPopup();方式<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;&lt;/div&gt;的方式我是没有试成功，无论如何设置，div都在applet的下面，要是哪位实验成功了，经验也共享一下<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;由于window.createPopup()主要用于创建右键菜单，由于其的一些特性，例如在其他地方点击,该window.createPopup()对象消失，所以叠加层方式使用window.createPopup()并不合适，使用iframe制作叠加层的效果更好更好<br />
<br />
&nbsp;&nbsp;&nbsp; 效果图如下<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="475" alt="" src="http://www.blogjava.net/images/blogjava_net/sunfruit/applet_div.JPG" width="637" border="1" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 演示：<a href="http://www.fruitres.cn/applet.jsp">http://www.fruitres.cn/applet.jsp</a>，可以从该演示页直接下载js代码，或者到代码下载页下载<br />
&nbsp;&nbsp;&nbsp; 代码下载：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1084563770&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1084563770&amp;number=0</a>&nbsp;<br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a> 
 <img src ="http://www.blogjava.net/sunfruit/aggbug/171555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-12-29 15:36 <a href="http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]使用JAVA开发不规则滚动条</title><link>http://www.blogjava.net/sunfruit/archive/2007/12/29/171481.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 29 Dec 2007 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/12/29/171481.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/171481.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/12/29/171481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/171481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/171481.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
<br />
&nbsp;&nbsp;&nbsp; 在GIS网站上一般都会看到下面的滚动条，俗称骨头棒或是排骨架，当然这个是WEB方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="317" alt="" src="http://www.blogjava.net/images/blogjava_net/sunfruit/51ditu.JPG" width="328" border="1" /><br />
<br />
&nbsp;&nbsp;&nbsp; 如果是应用程序或是Applet该如何制作呢，其实也不复杂，只是需要灵活运用Swing的特性，下面是一个Application的demo<br />
&nbsp;&nbsp;&nbsp; <img height="296" alt="" src="http://www.blogjava.net/images/blogjava_net/sunfruit/application.JPG" width="400" border="1" /><br />
<br />
&nbsp;&nbsp;&nbsp; 看似复杂，其实如果理解了也没有什么神秘<br />
<br />
&nbsp;&nbsp;&nbsp; 下载地址：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1342916853&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1342916853&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp; JAVA WEB START演示地址：<a href="http://www.fruitres.cn/useruploadfile/3/1342916853_jnlp.jnlp">http://www.fruitres.cn/useruploadfile/3/1342916853_jnlp.jnlp</a><br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a><br />
<br />
<img src ="http://www.blogjava.net/sunfruit/aggbug/171481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-12-29 12:56 <a href="http://www.blogjava.net/sunfruit/archive/2007/12/29/171481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]使用ArcIMS引擎绘制地图基础代码</title><link>http://www.blogjava.net/sunfruit/archive/2007/11/30/164436.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 30 Nov 2007 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/11/30/164436.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/164436.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/11/30/164436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/164436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/164436.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 代码演示了基于ArcIMS开发包进行地图开发的基础方法<br />
<br />
&nbsp;&nbsp;&nbsp; 代码不是单独的可执行类，所以只看private&nbsp;void&nbsp;initMap()方法和public&nbsp;BufferedImage&nbsp;render()方法即可。MapBoundModel不用深究可以理解为等同Envelope类即可<br />
<br />
&nbsp;&nbsp;&nbsp; 在确定以下三个值<br />
&nbsp;&nbsp;&nbsp; private&nbsp;String&nbsp;host&nbsp;=&nbsp;"172.17.8.99";<br />
&nbsp;&nbsp;&nbsp; private&nbsp;int&nbsp;port&nbsp;=&nbsp;5300;<br />
&nbsp;&nbsp;&nbsp; private&nbsp;String&nbsp;servicename&nbsp;=&nbsp;"sde";<br />
&nbsp;&nbsp;&nbsp; 设置正确并且调用refresh();方法也没有异常抛出，但是getStream();返回null值得时候，则需要调整AXL文件添加&lt;OUTPUT method="stream"/&gt;<output&nbsp;method="stream" />重新发布，具体AXL内容请注册后下载加密附件查看<br />
<br />
&nbsp;&nbsp;&nbsp; 查看代码直接下载demo文件即可<br />
<br />
&nbsp;&nbsp;&nbsp; 地址：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1257242391&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1257242391&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn">http://www.fruitres.cn</a> 
<img src ="http://www.blogjava.net/sunfruit/aggbug/164436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-11-30 23:28 <a href="http://www.blogjava.net/sunfruit/archive/2007/11/30/164436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]使用GeoTools引擎绘制地图基础代码</title><link>http://www.blogjava.net/sunfruit/archive/2007/11/30/164435.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 30 Nov 2007 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/11/30/164435.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/164435.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/11/30/164435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/164435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/164435.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
<br />
&nbsp;&nbsp;&nbsp; Geotools是一个开源的Java&nbsp;GIS工具包,可利用它来开发符合标准的地理信息系统。Geotools提供了OGC(Open&nbsp;Geospatial&nbsp;Consortium)规范的一个实现来作为他们的开发<br />
<br />
&nbsp;&nbsp;&nbsp; 代码演示了基于GeoTools开源包进行地图开发的基础方法<br />
<br />
&nbsp;&nbsp;&nbsp; 代码不是单独的可执行类，所以只看private&nbsp;void&nbsp;init()方法和public&nbsp;BufferedImage&nbsp;render()方法即可。MapBoundModel不用深究可以理解为等同Envelope类即可<br />
<br />
直接下载demo文件即可<br />
<br />
&nbsp;&nbsp;&nbsp; 下载地址：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=627152979&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=627152979&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn">http://www.fruitres.cn</a>
<img src ="http://www.blogjava.net/sunfruit/aggbug/164435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-11-30 23:27 <a href="http://www.blogjava.net/sunfruit/archive/2007/11/30/164435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA开发的俄罗斯方块源代码</title><link>http://www.blogjava.net/sunfruit/archive/2007/09/29/149503.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 29 Sep 2007 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/09/29/149503.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/149503.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/09/29/149503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/149503.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/149503.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
<br />
&nbsp;&nbsp;&nbsp; JAVA开发的俄罗斯方块源代码，比较简陋，只支持最基本的功能，不过框架清晰，感兴趣的可以参考<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 直接下载demo文件即可<br />
<br />
&nbsp;&nbsp;&nbsp; JDK1.5<br />
<br />
&nbsp;&nbsp;&nbsp; 下载地址:<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1925709310&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1925709310&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp; 更多下载:<a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a>
  <img src ="http://www.blogjava.net/sunfruit/aggbug/149503.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-09-29 11:11 <a href="http://www.blogjava.net/sunfruit/archive/2007/09/29/149503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[资料]WINDOWS平台的java串口开发包javacomm20-win32</title><link>http://www.blogjava.net/sunfruit/archive/2007/09/12/144433.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Wed, 12 Sep 2007 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/09/12/144433.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/144433.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/09/12/144433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/144433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/144433.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
&nbsp;&nbsp;&nbsp; windows平台串口java开发包javacomm20-win32<br />
<br />
&nbsp;&nbsp;&nbsp; 下载地址：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=994930817&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=994930817&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn">http://www.fruitres.cn</a>
  <img src ="http://www.blogjava.net/sunfruit/aggbug/144433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-09-12 11:10 <a href="http://www.blogjava.net/sunfruit/archive/2007/09/12/144433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]基本绘图演示源代码，绘制矩形</title><link>http://www.blogjava.net/sunfruit/archive/2007/09/03/142259.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Mon, 03 Sep 2007 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/09/03/142259.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/142259.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/09/03/142259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/142259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/142259.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 源代码四个文件,在这个DEMO中可以看到<br />
&nbsp;&nbsp;&nbsp; 如何使用2D组件，如何把JPanel做为画板使用，如何使用Canvas替代JPanel，如何设置2D组件的线宽<br />
<br />
&nbsp;&nbsp;&nbsp; 这个只是针对像入门的新手，高手就不需要看了，免得扔鸡蛋<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 下载地址&nbsp;<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1016162856&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1016162856&amp;number=0</a><br />
&nbsp;&nbsp;&nbsp;&nbsp; 更多工具和文档请到 <a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a> 
 <img src ="http://www.blogjava.net/sunfruit/aggbug/142259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-09-03 12:46 <a href="http://www.blogjava.net/sunfruit/archive/2007/09/03/142259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Oracle表结构导出为HTML工具1.0.4</title><link>http://www.blogjava.net/sunfruit/archive/2007/07/19/131237.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Thu, 19 Jul 2007 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/07/19/131237.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/131237.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/07/19/131237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/131237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/131237.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
将Oracle表结构导出成Html页面的工具<br />
<br />
1.0.4<br />
增加了导出触发器、存储过程、函数的功能，并且修改了不能导出KEYS全部类型的BUG<br />
<br />
1.0.3<br />
增加了导出Sequences、View的功能，并且导出界面默认导出到安装文件夹中的export目录中<br />
<br />
1.0.2<br />
增加了导出KEYS、INDEX的功能<br />
<br />
1.0.1<br />
增加了导出完毕以后直接点击打开文件夹、打开文件的查看方式，并且支持Linux/Win&nbsp;平台<br />
<br />
1.0.0<br />
导出为html文件，导出完毕后直接查看index.html文件即可。导出的内容包括各个表的名称索引和注释以及表中各个字段的明细和注释 <br />
<br />
下载地址&nbsp;<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=942025602&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=942025602&amp;number=0</a>&nbsp;下载版本1.0.4<br />
更多工具和文档请到 <a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a> 
  <img src ="http://www.blogjava.net/sunfruit/aggbug/131237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-07-19 11:41 <a href="http://www.blogjava.net/sunfruit/archive/2007/07/19/131237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]通过JAVA改变图片的像素Alpha值实现图片透明</title><link>http://www.blogjava.net/sunfruit/archive/2007/05/20/118612.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 19 May 2007 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/05/20/118612.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/118612.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/05/20/118612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/118612.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/118612.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; --sunfruit<br><br>&nbsp;&nbsp;&nbsp; 设置图片的每个象素Alpha，使得图片透明，核心代码如下<br><br>&nbsp;&nbsp;&nbsp; private void setAlpha(ByteArrayOutputStream os) {<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * 增加测试项<br>&nbsp;&nbsp;&nbsp;&nbsp; * 读取图片，绘制成半透明<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIcon imageIcon = new ImageIcon(os.toByteArray());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , BufferedImage.TYPE_4BYTE_ABGR);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g2D.drawImage(imageIcon.getImage(), 0, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageIcon.getImageObserver());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //循环每一个像素点，改变像素点的Alpha值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int alpha = 100;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j1 = bufferedImage.getMinY(); j1 &lt; bufferedImage.getHeight(); j1++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j2 = bufferedImage.getMinX(); j2 &lt; bufferedImage.getWidth(); j2++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rgb = bufferedImage.getRGB(j2, j1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb = ( (alpha + 1) &lt;&lt; 24) | (rgb &amp; 0x00ffffff);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bufferedImage.setRGB(j2, j1, rgb);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成图片为PNG</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIO.write(bufferedImage, "png",&nbsp; new File(图片路径));<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (Exception e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp; }</p>
  <img src ="http://www.blogjava.net/sunfruit/aggbug/118612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-05-20 00:20 <a href="http://www.blogjava.net/sunfruit/archive/2007/05/20/118612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]通过HttpURLConnection如何使用代理服务器连接公网</title><link>http://www.blogjava.net/sunfruit/archive/2007/03/22/105487.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Thu, 22 Mar 2007 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/03/22/105487.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/105487.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/03/22/105487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/105487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/105487.html</trackback:ping><description><![CDATA[&#160;&#160;&#160; --sunfruit<br /><br />&#160;&#160;&#160; 在openConnection之前加上<br />&#160;&#160;&#160; Properties&#160;&#160; prop&#160;&#160; =&#160;&#160; System.getProperties();<br />&#160;&#160;&#160;&#160;System.getProperties().put("proxySet","true");<br />&#160;&#160;&#160;&#160;// 设置http访问要使用的代理服务器的地址<br />&#160;&#160;&#160; prop.setProperty("http.proxyHost","xxxxxxx");<br />&#160;&#160;&#160;&#160;// 设置http访问要使用的代理服务器的端口<br />&#160;&#160;&#160;&#160;prop.setProperty("http.proxyPort","xxxxx");<br />&#160;&#160;&#160; <br />&#160;&#160;&#160; 然后并不像有的贴子说的那样添加<br />&#160;&#160;&#160; prop.setProperty("http.proxyUser","xxxxxxxx");<br />&#160;&#160;&#160;&#160;prop.setProperty("http.proxyPassword","xxxxx");<br />&#160;&#160;&#160; 添加这样的内容是不行的，而是将"username:password"进行base64编码，具体代码如下<br />&#160;&#160;&#160; String authentication = "username:password";<br />&#160;&#160;&#160; String encodedLogin = new BASE64Encoder().encode(authentication.getBytes());<br />&#160;&#160;&#160;&#160;httpurlconnection.setRequestProperty("Proxy-Authorization", " Basic " + encodedLogin);<br />&#160;&#160;&#160; <br />&#160;&#160;&#160; 注意BASE64Encoder().encode(authentication.getBytes());这里不能使用BASE64Encoder().encodeBuffer(authentication.getBytes())否则报错<br />&#160;&#160;&#160; 具体原因参考sun公布的JDK BUG , Bug ID:&#160; 4615330&#160; <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615330">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615330</a>  <img src ="http://www.blogjava.net/sunfruit/aggbug/105487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-03-22 10:41 <a href="http://www.blogjava.net/sunfruit/archive/2007/03/22/105487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]关于JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件的几点说明</title><link>http://www.blogjava.net/sunfruit/archive/2006/11/09/80070.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Thu, 09 Nov 2006 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/11/09/80070.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/80070.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/11/09/80070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/80070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/80070.html</trackback:ping><description><![CDATA[    --sunfruit<br />    前一段时间发了一个“<a class="titlelink" id="Editor_Results_rprSelectionList_ctl02_Hyperlink1" href="/sunfruit/archive/2006/10/24/77086.html"><font color="#000000">[原创]JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件</font></a>”的文章，后来经过深入的使用该功能发现几个要点说明如下：<br />    第一：正文必须第一个添加到Multipart对象中<br />    第二：IMGX  X是序号，该序号必须从1开始，并且只能为数字<br />    以上两点缺少一点都不会成功<br />    另：ByteArrayDataSource  这个类在旧的javamail开发包中没有，需要新的javamail开发包<img src ="http://www.blogjava.net/sunfruit/aggbug/80070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-11-09 11:06 <a href="http://www.blogjava.net/sunfruit/archive/2006/11/09/80070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件</title><link>http://www.blogjava.net/sunfruit/archive/2006/10/24/77086.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 24 Oct 2006 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/10/24/77086.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/77086.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/10/24/77086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/77086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/77086.html</trackback:ping><description><![CDATA[
		<p>    --sunfruit<br />   没有什么说的，源代码如下<br />public void sendMail(int id) {<br />        //数据初始化<br />        Transport transport; //发邮件时使用<br />        String part = GetResource.getXMLValue("mail_port"); //端口<br />        String mailhost = GetResource.getXMLValue("mail_server"); //服务器<br />        String user = GetResource.getXMLValue("mail_user"); //用户名<br />        String password = GetResource.getXMLValue("mail_password"); //密码<br />        String from = GetResource.getXMLValue("mail_from"); //发件mail<br />        String strname = GetResource.getXMLValue("mail_strname"); //在地址栏上显示的名字</p>
		<p>        String to = GetResource.getXMLValue("mail_to"); //收件人<br />        String cc = ""; //抄送人<br />        String bcc = ""; //密送人<br />        String title = GetResource.getXMLValue("mail_title"); //标题<br />        byte[] bytes = null;<br />        try {<br />            bytes = FileIO.readFile(GetResource.getXMLValue("mail_contentpath")); //正文<br />        } catch (IOException ex) {<br />            log.error("",ex);<br />        }<br />        String fromat = GetResource.getXMLValue("mail_fromat");</p>
		<p>        //获得下载需要的key<br />        byte[] bkeydes=null;<br />        try {<br />            bkeydes=FileIO.readFile(GetResource.getXMLValue("附件地址"));<br />        } catch (IOException ex) {<br />            log.error("",ex);<br />        }<br /><br />        try {<br />            Properties props = System.getProperties(); //获得系统属性<br />            props.put("mail.smtp.host", mailhost); //设置SMTP主机<br />            props.put("mail.smtp.auth", "true"); //设置身份验证为真，若须身份验证则必须设为真</p>
		<p>            //获得邮件会话对象<br />            Session session = null;</p>
		<p>            //需要验证<br />            session = Session.getDefaultInstance(props,<br />                                                 new SmtpAuthenticator(user,<br />                    password));</p>
		<p>            //创建MIME邮件对象<br />            MimeMessage mimeMsg = new MimeMessage(session);<br />            //设置发信人<br />            if (strname != null &amp;&amp; !strname.equals("")) {<br />                mimeMsg.setFrom(new InternetAddress(from, strname));<br />            } else {<br />                mimeMsg.setFrom(new InternetAddress(from));<br />            }<br />            //设置收信人<br />            if (!to.equals("")) {<br />                mimeMsg.setRecipients(Message.RecipientType.TO,<br />                                      InternetAddress.parse(to));<br />            }<br />            //设置抄送人<br />            if (!cc.equals("")) {<br />                mimeMsg.setRecipients(Message.RecipientType.CC,<br />                                      InternetAddress.parse(cc));<br />            }<br />            //设置暗送人<br />            if (!bcc.equals("")) {<br />                mimeMsg.setRecipients(Message.RecipientType.BCC,<br />                                      InternetAddress.parse(bcc));<br />            }<br />            //设置邮件主题<br />            sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();<br />//            mimeMsg.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) +<br />//                               "?=");<br />            mimeMsg.setSubject(title, "GBK");<br />            //设置邮件内容<br />            //mimeMsg.setText(content, "gb2312");<br />            //发送日期<br />            mimeMsg.setSentDate(new Date());<br />            /*******************附件 begin××××××××××××××××××××××××*/<br />            BodyPart mbp = null; //正文<br />            //MimeBodyPart mbp1 = null; //附件</p>
		<p>            mbp = new MimeBodyPart();<br />            //设置邮件正文格式（html/text）<br />            if (fromat.equals("0") || fromat.equals("")) {<br />                //普通格式<br />                mbp.setText(new String(bytes,"GBK"));<br />            } else {<br />                //网页格式<br />                mbp.setDataHandler(new DataHandler(new String(bytes,"GBK"),<br />                        "text/html;charset=gb2312"));<br />            }<br />            //!!!!注意必须为new MimeMultipart("related"); 这样的实例化才能发送html正文显示图片的邮件 "related"<br />            //new MimeMultipart(); 这样实例化则不能发送html正文显示图片的邮件 只可以发送其他的邮件<br />            Multipart mp = new MimeMultipart("related");<br />            if (mbp != null)<br />                mp.addBodyPart(mbp); //正文</p>
		<p>            //附件key.des<br />            BodyPart messageBodyPart = new MimeBodyPart();<br />            ByteArrayDataSource fileds = new ByteArrayDataSource(bkeydes,"application/octet-stream");<br />            messageBodyPart.setDataHandler(new DataHandler(fileds));<br />            //解决附件中文问题<br />            //mbp1.setFileName(fileds.getName(),"gb2312");<br />            messageBodyPart.setFileName(MimeUtility.encodeWord("key.des", "GB2312", null));<br />            mp.addBodyPart(messageBodyPart);</p>
		<p>            //附件 图标<br />            messageBodyPart = new MimeBodyPart();<br />            bytes=FileIO.readFile(GetResource.getXMLValue("img_logo"));<br />            fileds = new ByteArrayDataSource(bytes,"application/octet-stream");<br />            messageBodyPart.setDataHandler(new DataHandler(fileds));<br />            //解决附件中文问题<br />//            messageBodyPart.setFileName("fruitrsource_touming.jpg");<br />//            messageBodyPart.setHeader("Content-ID", "fruitrsource_touming");<br />            messageBodyPart.setFileName("1.jpg");<br />            //!!!!注意这里是"&lt;IMG1&gt;" 带有尖括号 而在正文的html里面则是src="cid:IMG1"<br />            messageBodyPart.setHeader("Content-ID", "&lt;IMG1&gt;");<br />            mp.addBodyPart(messageBodyPart);</p>
		<p>            // 添加 Multipart到Message中<br />            mimeMsg.setContent(mp);<br />            mimeMsg.saveChanges();<br />            transport = session.getTransport("smtp");<br />            transport.connect(mailhost, Integer.parseInt(part), user, password);<br />            //发送邮件<br />            //transport.send(mimeMsg, mimeMsg.getAllRecipients());<br />            //transport.send(mimeMsg);<br />            transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());<br />            //System.out.println("mail send!");<br />            transport.close();</p>
		<p>        }</p>
		<p>        catch (Exception e) {<br />            e.printStackTrace();</p>
		<p>        }<br />    }<br /><br />class SmtpAuthenticator extends Authenticator {<br />        //SMTP身份验证<br />        public SmtpAuthenticator(String username, String password) {<br />            this.username = username;<br />            this.password = password;<br />        }</p>
		<p>        public PasswordAuthentication getPasswordAuthentication() {<br />            return new PasswordAuthentication(this.username, this.password);<br />        }</p>
		<p>        String username = null;<br />        String password = null;<br />    }</p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/77086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-10-24 23:04 <a href="http://www.blogjava.net/sunfruit/archive/2006/10/24/77086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]利用图片的像素RGB值还原图像的JAVA应用</title><link>http://www.blogjava.net/sunfruit/archive/2006/10/23/76830.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Mon, 23 Oct 2006 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/10/23/76830.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/76830.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/10/23/76830.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/76830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/76830.html</trackback:ping><description><![CDATA[		<p>&#160;&#160;&#160; --sunfruit<br />&#160;&#160;&#160; JAVA编写的使用像素RGB值还原图像的方法，代码如下<br />&#160;&#160;&#160; public class ImageData {</p>
		<p>&#160;&#160;&#160; private int[][] idata=null;</p>
		<p>&#160;&#160;&#160; public ImageData() {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; readImageData();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; writeImageData();<br />&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160; private int[][] readImageData()<br />&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //imagedata的键值就是一个存储了图像像素RGB值得文本文件<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RandomAccessFile randomAccessFile = new RandomAccessFile(new File(GetResource.getXMLValue("imagedata")),"r");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; long filesize=randomAccessFile.length();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; long filepointer=0;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DynArrayInt dynArrayInt=null;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ArrayList arrayList=new ArrayList();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int n1=0;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; while(filesize&gt;filepointer)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; filepointer=randomAccessFile.getFilePointer();</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; String str1=randomAccessFile.readLine();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(str1!=null)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; String[] str2=str1.split("&#160;");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; String[] str3=str2[1].split(",");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dynArrayInt=new DynArrayInt();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0;i&lt;str3.length;i++)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(!str3[i].equals(""))<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int pix = Integer.parseInt(str3[i], 16);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dynArrayInt.addInt(pix);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(n1==0)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; n1=dynArrayInt.getSize();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; arrayList.add(dynArrayInt);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; idata=new int[arrayList.size()][dynArrayInt.getSize()];<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0;i&lt;idata.length;i++)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DynArrayInt dynArrayInt1=(DynArrayInt)arrayList.get(i);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int j=0;j&lt;idata[i].length;j++)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; idata[i][j]=dynArrayInt1.getInt(j);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception ex) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ex.printStackTrace();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return idata;<br />&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160; private void writeImageData()<br />&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; BufferedImage bufferedImage=new BufferedImage(idata[0].length,idata.length,BufferedImage.TYPE_INT_RGB);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int i=0;i&lt;idata.length;i++)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for(int j=0;j&lt;idata[i].length;j++)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bufferedImage.setRGB(j,i,idata[i][j]);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Random random=new Random(System.currentTimeMillis());<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; String ext="jpg";<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; String filepath = System.getProperty("java.io.tmpdir") + random.nextInt(99999) + "." + ext;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ImageIO.write(bufferedImage, ext,&#160; new File(filepath));<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("文件已经生成，路经为" + filepath);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch (IOException ex) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ex.printStackTrace();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160; }</p>
		<p>&#160;&#160;&#160; public static void main(String[] args) {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ImageData imagedata = new ImageData();<br />&#160;&#160;&#160; }<br />}<br /><br />其中的&#8220;GetResource&#8221;，&#8220;DynArrayInt&#8221;为自定义类，GetResource得功能就是解析获取properties文件的内容，DynArrayInt是一个整形动态数组，可以在以前的文章里获得&#8220;DynArrayInt&#8221;的源代码,所谓的图像的像素值就是如下数据<br />px1&#160;44525b,44555d,475a61,47585d,44555a,46575c,44575d,43565c,42575e,43585f,445960,435962,435964,425861,425861,41585e,3f555e,3e545f,3d5261,3c5162,3d4f59,3d4f59,3f515b,40525c,40525c,40525c,40525c,3f515b,3f515b,3f4f5a,3f4f5c,40505d,3f515f,3f515f,3d5060,3c4f5f,3b505f,3a4e58,3e525e,3e525e,3d5060,415466,3f5264,405363,405460,41555f,42575d,42575e,43585f,445862,445862,445864,445864,445866,445866,415760,435962,445a63,455b66,455b66,445a67,455b68,485d6c,4c626f,4d636e,4e646f,4d636c,4b616a,51686e,536a70,566d73,5c7378,6f7c7a,7c8987,86908f,8d9796,8e9696,949a9a,969c9c,9ca2a2,a1a3a1,a8aaa8,aeb1ac,b2b5b0,b9bcb7,c5c8c2,cccfc9,ced1c9,d6d9d1,d5d8d3,d7dad5,dadbd5,dcddd7,dcdbd4,ddddd3,e0ddd4,e0ddd4,deddd6,deddd6,deddd6,dfded7,dfded7,e0dfd8,e0dfd8,e0dfd8,e0dfd8,e3dfd9,e3dfd9,e3dfd9,e3dfd9,e4e0da,e4e0da,e4e0da,e5e1db,e5e1db,e2e1da,e2e1da,e3e2db,e3e2db,e4e3dc,e4e3dc,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e6e5de,e6e5de,e6e5de,e6e5de,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e4e1d8,e5e2d9,e5e2d9,e4e1d8,e2dfd6,e3e0d7,e2dfd6,e1ded5,e1ded5,e2dfd6,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e1ded5,e1ded5,e1ded5,dedad4,dedad4,dcdbd4,dcdbd4,dbdcd4,dbdcd4,d9dcd4,d9dcd4,dedad4,dedad4,ddd9d3,ddd9d3,dbd7d1,dbd7d1,dcd8d2,dcd8d2,dbd7d1,d5d8d0,d5d8d0,d7d8d0,d7d8d0,d7d6cf,d9d5cf,d9d5cf,d9d5cf,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d5d4cd,d5d4cd,d5d7cc,d5d7cc,d5d7cc,d5d7cc,d4d6cb,d4d6cb,d5d7cc,d5d7cc,d5d7cc,d2d7d0,d2d7d0,d3d6d0,d3d6d0,d4d5cf,d4d5cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d0d3cb,d2d3cb,d3d2cb,d6d0cb,d6d0cb,d4d3cc,d3d4cc,d2d5cd,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d3d2ce,d0d3cb,d0d3cb,d2d3cb,d2d3cb,d3d2cb,d3d2cb,d5d1cb,d5d1cb,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d1d0c9,d1d0c9,d2d1ca,d2d1ca,d3d2cb,d3d2cb,d3d2cb,d3d2cb<br />px0&#160;44525b,44575e,465b62,485a5a,455757,46585a,44575b,42555b,41565d,435761,445862,445a63,435966,435964,42595f,42595e,40575c,3f5560,3d5263,3c5066,3a4c58,3b4d59,3d4f5b,3e505a,40525c,40525c,40535a,3f5259,3f5259,3f5057,3f5057,405158,3f5259,3f5259,3d515b,3c505a,3b515c,3a4e5a,3e5260,3e5260,3d5060,415468,3f5266,3f5262,405462,405460,42575d,42575e,43585f,435761,41555f,425662,445864,465a68,465a68,415760,425861,445a63,445a65,445a65,465c69,475d6a,475c6b,44596a,485d6e,4c6373,4d6474,4a616f,4b6472,4b6472,496270,4c6573,5f6c6e,677476,6f7c7e,798587,818a8d,899295,8f969a,91989c,949895,9a9e9b,9ea39d,a1a6a0,a9aea8,aeb3ac,babfb8,c0c5bc,ccd1c8,cfd2cd,d2d5d0,d5d6d0,d7d8d2,dcdbd4,ddddd3,e0ddd4,e0ddd4,deddd6,deddd6,deddd6,dfded7,dfded7,e0dfd8,e0dfd8,e0dfd8,e0dfd8,e3dfd9,e3dfd9,e3dfd9,e3dfd9,e4e0da,e4e0da,e4e0da,e5e1db,e5e1db,e2e1da,e2e1da,e3e2db,e3e2db,e4e3dc,e4e3dc,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e6e5de,e6e5de,e6e5de,e6e5de,e5e4dd,e5e4dd,e5e4dd,e5e4dd,e4e1d8,e4e1d8,e4e1d8,e3e0d7,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e2dfd6,e2dfd6,e2dfd6,e2dfd6,e1ded5,e1ded5,e1ded5,e1ded5,e1ded5,ddd9d3,ddd9d3,dbdad3,dbdad3,dadbd3,dadbd3,d8dbd3,d8dbd3,dedad4,dedad4,ddd9d3,ddd9d3,dad6d0,dbd7d1,dcd8d2,dcd8d2,dbd7d1,d5d8d0,d5d8d0,d5d8d0,d7d8d0,d6d7cf,d7d6cf,d7d6cf,d9d5cf,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d6d5ce,d5d4cd,d5d4cd,d6d8cd,d6d8cd,d6d8cd,d6d8cd,d4d6cb,d4d6cb,d5d7cc,d5d7cc,d5d7cc,d3d8d1,d3d8d1,d4d7d1,d4d7d1,d4d5cf,d4d5cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d5d4cf,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d4d3ce,d0d3cb,d2d3cb,d3d2cb,d6d0cb,d7d1cc,d4d3cc,d4d5cd,d2d5cd,d4d2d1,d4d2d1,d4d2d1,d4d2d1,d4d2d1,d3d1d0,d3d1d0,d3d1d0,d3d1d0,d0d3cb,d0d3cb,d2d3cb,d2d3cb,d3d2cb,d3d2cb,d5d1cb,d5d1cb,d3d2cd,d3d2cd,d3d2cd,d3d2cd,d3d2cd,d2d1cc,d2d1cc,d2d1cc,d2d1cc,d1d0c9,d1d0c9,d2d1ca,d2d1ca,d4d3cc,d4d3cc,d4d3cc,d4d3cc<br />以上数据表示图像有两行像素，每一行有260个像素组成，每个像素的RGB值就是44525b</p>
 <img src ="http://www.blogjava.net/sunfruit/aggbug/76830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-10-23 21:28 <a href="http://www.blogjava.net/sunfruit/archive/2006/10/23/76830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用URLConnection或是HttpURLConnection类以POST或是GET方式提交保持Session的解决办法</title><link>http://www.blogjava.net/sunfruit/archive/2006/09/01/67098.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 01 Sep 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/09/01/67098.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/67098.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/09/01/67098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/67098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/67098.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br>&nbsp;&nbsp;&nbsp; 当通过URLConnection第一次和服务器发起POST或是GET请求以后，通过getHeaderField方法获得SessionID，具体方法为：<br>&nbsp;&nbsp;&nbsp; String session_value=getHeaderField("Set-Cookie");<br>&nbsp;&nbsp;&nbsp; 第二次发起POST或是GET请求的时候需要把刚才获得的SessionID放置在请求的头部然后再提交，这样就能服务器就会认为是同一个Session请求了，具体方法为：<br>&nbsp;&nbsp;&nbsp; setRequestProperty("Cookie", session_value);<br><br>&nbsp;&nbsp;&nbsp; 如果取得Set-Cookie的值比较长，取值到分号前即可 如 JSESSIONID=575F7196EDB52825D288F4061C66BC29;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;这样就实现了保存session向服务器提交请求 
 <img src ="http://www.blogjava.net/sunfruit/aggbug/67098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-09-01 14:21 <a href="http://www.blogjava.net/sunfruit/archive/2006/09/01/67098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转发]Java虚拟机的深入研究</title><link>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 21 Jul 2006 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/59470.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/59470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/59470.html</trackback:ping><description><![CDATA[
		<div align="left">
				<p class="title" align="center">
						<strong>Java虚拟机的深入研究</strong>
				</p>
				<p align="center">作者：刘学超 </p>
				<p>
						<b>1  Java技术与Java虚拟机 </b>
				</p>
				<p class="normal">说起Java，人们首先想到的是Java编程语言，然而事实上，Java是一种技术，它由四方面组成: Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示： </p>
				<p align="center">
				</p>
				<p align="center">
						<img height="397" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm01.gif" width="529" border="0" />图1  Java四个方面的关系 </p>
				<p class="normal">运行期环境代表着Java平台，开发人员编写Java代码(.java文件)，然后将之编译成字节码(.class文件)。最后字节码被装入内存，一旦字节码进入虚拟机，它就会被解释器解释执行，或者是被即时代码发生器有选择的转换成机器码执行。从上图也可以看出Java平台由Java虚拟机和Java应用程序接口搭建，Java语言则是进入这个平台的通道，用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示：<img height="251" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm02.gif" width="609" border="0" /></p>
				<p align="center">
				</p>
				<p class="normal">在Java平台的结构中, 可以看出，Java虚拟机(JVM) 处在核心的位置，是程序与底层操作系统和硬件无关的关键。它的下方是移植接口，移植接口由两部分组成：适配器和Java操作系统, 其中依赖于平台的部分称为适配器；JVM 通过移植接口在具体的平台和操作系统上实现；在JVM 的上方是Java的基本类库和扩展类库以及它们的API， 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离，从而实现了Java 的平台无关性。 </p>
				<p class="normal">那么到底什么是Java虚拟机(JVM)呢？通常我们谈论JVM时，我们的意思可能是： </p>
				<ol>
						<li>对JVM规范的的比较抽象的说明； 
</li>
						<li>对JVM的具体实现； 
</li>
						<li>在程序运行期间所生成的一个JVM实例。 </li>
				</ol>
				<p class="normal">对JVM规范的的抽象说明是一些概念的集合，它们已经在书《The Java Virtual Machine Specification》（《Java虚拟机规范》）中被详细地描述了；对JVM的具体实现要么是软件，要么是软件和硬件的组合，它已经被许多生产厂商所实现，并存在于多种平台之上；运行Java程序的任务由JVM的运行期实例单个承担。在本文中我们所讨论的Java虚拟机(JVM)主要针对第三种情况而言。它可以被看成一个想象中的机器，在实际的计算机上通过软件模拟来实现，有自己想象中的硬件，如处理器、堆栈、寄存器等，还有自己相应的指令系统。 </p>
				<p class="normal">JVM在它的生存周期中有一个明确的任务，那就是运行Java程序，因此当Java程序启动的时候，就产生JVM的一个实例；当程序运行结束的时候，该实例也跟着消失了。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。 </p>
				<p>
						<b>2  Java虚拟机的体系结构 </b>
				</p>
				<p class="normal">刚才已经提到，JVM可以由不同的厂商来实现。由于厂商的不同必然导致JVM在实现上的一些不同，然而JVM还是可以实现跨平台的特性，这就要归功于设计JVM时的体系结构了。 </p>
				<p class="normal">我们知道，一个JVM实例的行为不光是它自己的事，还涉及到它的子系统、存储区域、数据类型和指令这些部分，它们描述了JVM的一个抽象的内部体系结构，其目的不光规定实现JVM时它内部的体系结构，更重要的是提供了一种方式，用于严格定义实现时的外部行为。每个JVM都有两种机制，一个是装载具有合适名称的类(类或是接口)，叫做类装载子系统；另外的一个负责执行包含在已装载的类或接口中的指令，叫做运行引擎。每个JVM又包括方法区、堆、Java栈、程序计数器和本地方法栈这五个部分，这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为： </p>
				<p align="center">
				</p>
				<p align="center">
						<img height="299" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm03.gif" width="589" border="0" />
						<br />图3  JVM的体系结构 </p>
				<p class="normal">JVM的每个实例都有一个它自己的方法域和一个堆，运行于JVM内的所有的线程都共享这些区域；当虚拟机装载类文件的时候，它解析其中的二进制数据所包含的类信息，并把它们放到方法域中；当程序运行的时候，JVM把程序初始化的所有对象置于堆上；而每个线程创建的时候，都会拥有自己的程序计数器和Java栈，其中程序计数器中的值指向下一条即将被执行的指令，线程的Java栈则存储为该线程调用Java方法的状态；本地方法调用的状态被存储在本地方法栈，该方法栈依赖于具体的实现。 </p>
				<p class="normal">下面分别对这几个部分进行说明。 </p>
				<p class="normal">执行引擎处于JVM的核心位置，在Java虚拟机规范中，它的行为是由指令集所决定的。尽管对于每条指令，规范很详细地说明了当JVM执行字节码遇到指令时，它的实现应该做什么，但对于怎么做却言之甚少。Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。 </p>
				<p class="normal">Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。 </p>
				<pre>												虚拟机的内层循环的执行过程如下: 
do{ 
取一个操作符字节; 
根据操作符的值执行一个动作; 
}while(程序未结束)

				
				</pre>
				<p class="normal">由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为: </p>
				<p class="normal">第一个字节*256+第二个字节字节码。 </p>
				<p class="normal">指令流一般只是字节对齐的。指令tableswitch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。 </p>
				<p class="normal">对于本地方法接口，实现JVM并不要求一定要有它的支持，甚至可以完全没有。Sun公司实现Java本地接口(JNI)是出于可移植性的考虑，当然我们也可以设计出其它的本地接口来代替Sun公司的JNI。但是这些设计与实现是比较复杂的事情，需要确保垃圾回收器不会将那些正在被本地方法调用的对象释放掉。 </p>
				<p class="normal">Java的堆是一个运行时数据区,类的实例(对象)从中分配空间，它的管理是由垃圾回收来负责的:不给程序员显式释放对象的能力。Java不规定具体使用的垃圾回收算法,可以根据系统的需求使用各种各样的算法。 </p>
				<p class="normal">Java方法区与传统语言中的编译后代码或是Unix进程中的正文段类似。它保存方法代码(编译后的java代码)和符号表。在当前的Java实现中,方法代码不包括在垃圾回收堆中,但计划在将来的版本中实现。每个类文件包含了一个Java类或一个Java界面的编译后的代码。可以说类文件是Java语言的执行代码文件。为了保证类文件的平台无关性,Java虚拟机规范中对类文件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。 </p>
				<p class="normal">Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。Java虚拟机的寄存器有四种: </p>
				<ol>
						<li>pc: Java程序计数器； 
</li>
						<li>optop: 指向操作数栈顶端的指针； 
</li>
						<li>frame: 指向当前执行方法的执行环境的指针；。 
</li>
						<li>vars: 指向当前执行方法的局部变量区第一个变量的指针。 </li>
				</ol>
				<p class="normal">在上述体系结构图中，我们所说的是第一种，即程序计数器，每个线程一旦被创建就拥有了自己的程序计数器。当线程执行Java方法的时候，它包含该线程正在被执行的指令的地址。但是若线程执行的是一个本地的方法，那么程序计数器的值就不会被定义。 </p>
				<p class="normal">Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。 </p>
				<p>
						<b>局部变量区 </b>
				</p>
				<p class="normal">每个Java方法使用一个固定大小的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第一个局部变量的索引来寻址。(例如,一个具有索引n的局部变量,如果是一个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。 </p>
				<p>
						<b>运行环境区 </b>
				</p>
				<p class="normal">在运行环境中包含的信息用于动态链接,正常的方法返回以及异常捕捉。 </p>
				<p class="normal">
						<b>动态链接</b>
				</p>
				<p class="normal">运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存储结构相应的偏移地址。动态链接方法和变量使得方法中使用的其它类的变化不会影响到本程序的代码。 </p>
				<p class="normal">
						<b>正常的方法返回</b>
				</p>
				<p class="normal">如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的程序计数器增加一个恰当的数值,以跳过已执行过的方法调用指令,然后在调用者的执行环境中继续执行下去。 </p>
				<p class="normal">
						<b>异常捕捉</b>
				</p>
				<p class="normal">异常情况在Java中被称作Error(错误)或Exception(异常),是Throwable类的子类,在程序中的原因是:①动态链接错,如无法找到所需的class文件。②运行时错,如对一个空指针的引用。程序使用了throw语句。 </p>
				<p class="normal">当异常发生时,Java虚拟机采取如下措施: </p>
				<ul>
						<li>检查与当前方法相联系的catch子句表。每个catch子句包含其有效指令范围,能够处理的异常类型,以及处理异常的代码块地址。 
</li>
						<li>与异常相匹配的catch子句应该符合下面的条件:造成异常的指令在其指令范围之内,发生的异常类型是其能处理的异常类型的子类型。如果找到了匹配的catch子句,那么系统转移到指定的异常处理块处执行;如果没有找到异常处理块,重复寻找匹配的catch子句的过程,直到当前方法的所有嵌套的catch子句都被检查过。 
</li>
						<li>由于虚拟机从第一个匹配的catch子句处继续执行,所以catch子句表中的顺序是很重要的。因为Java代码是结构化的,因此总可以把某个方法的所有的异常处理器都按序排列到一个表中,对任意可能的程序计数器的值,都可以用线性的顺序找到合适的异常处理块,以处理在该程序计数器值下发生的异常情况。 
</li>
						<li>如果找不到匹配的catch子句,那么当前方法得到一个"未截获异常"的结果并返回到当前方法的调用者,好像异常刚刚在其调用者中发生一样。如果在调用者中仍然没有找到相应的异常处理块,那么这种错误将被传播下去。如果错误被传播到最顶层,那么系统将调用一个缺省的异常处理块。 </li>
				</ul>
				<p>
						<b>操作数栈区 </b>
				</p>
				<p class="normal">机器指令只从操作数栈中取操作数,对它们进行操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或非通用寄存器的机器(如Intel486)上,也能够高效地模拟虚拟机的行为。操作数栈是32位的。它用于给方法传递参数,并从方法接收结果,也用于支持操作的参数,并保存操作的结果。例如,iadd指令将两个整数相加。相加的两个整数应该是操作数栈顶的两个字。这两个字是由先前的指令压进堆栈的。这两个整数将从堆栈弹出、相加,并把结果压回到操作数栈中。 </p>
				<p class="normal">每个原始数据类型都有专门的指令对它们进行必须的操作。每个操作数在栈中需要一个存储位置,除了long和double型,它们需要两个位置。操作数只能被适用于其类型的操作符所操作。例如,压入两个int类型的数,如果把它们当作是一个long类型的数则是非法的。在Sun的虚拟机实现中,这个限制由字节码验证器强制实行。但是,有少数操作(操作符dupe和swap),用于对运行时数据区进行操作时是不考虑类型的。 </p>
				<p class="normal">本地方法栈，当一个线程调用本地方法时，它就不再受到虚拟机关于结构和安全限制方面的约束，它既可以访问虚拟机的运行期数据区，也可以使用本地处理器以及任何类型的栈。例如，本地栈是一个C语言的栈，那么当C程序调用C函数时，函数的参数以某种顺序被压入栈，结果则返回给调用函数。在实现Java虚拟机时，本地方法接口使用的是C语言的模型栈，那么它的本地方法栈的调度与使用则完全与C语言的栈相同。 </p>
				<p>
						<b>3  Java虚拟机的运行过程 </b>
				</p>
				<p class="normal">上面对虚拟机的各个部分进行了比较详细的说明，下面通过一个具体的例子来分析它的运行过程。 </p>
				<p class="normal">虚拟机通过调用某个指定类的方法main启动，传递给main一个字符串数组参数，使指定的类被装载，同时链接该类所使用的其它的类型，并且初始化它们。例如对于程序： </p>
				<pre>												class HelloApp 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!"); 
		for (int i = 0; i &lt; args.length; i++ )
		{
			System.out.println(args[i]);
		}
	}
}

				
				</pre>
				<p class="normal">编译后在命令行模式下键入： java HelloApp run virtual machine </p>
				<p class="normal">将通过调用HelloApp的方法main来启动java虚拟机，传递给main一个包含三个字符串"run"、"virtual"、"machine"的数组。现在我们略述虚拟机在执行HelloApp时可能采取的步骤。 </p>
				<p class="normal">开始试图执行类HelloApp的main方法，发现该类并没有被装载，也就是说虚拟机当前不包含该类的二进制代表，于是虚拟机使用ClassLoader试图寻找这样的二进制代表。如果这个进程失败，则抛出一个异常。类被装载后同时在main方法被调用之前，必须对类HelloApp与其它类型进行链接然后初始化。链接包含三个阶段：检验，准备和解析。检验检查被装载的主类的符号和语义，准备则创建类或接口的静态域以及把这些域初始化为标准的默认值，解析负责检查主类对其它类或接口的符号引用，在这一步它是可选的。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。整个过程如下：<br /></p>
				<p align="center">
				</p>
				<p align="center">
						<img height="610" alt="" src="http://gceclub.sun.com.cn/staticcontent/html/2004-04-09/jvm04.gif" width="702" border="0" />
						<br />图4：虚拟机的运行过程 </p>
				<p>
						<b>4  结束语 </b>
				</p>
				<p class="normal">本文通过对JVM的体系结构的深入研究以及一个Java程序执行时虚拟机的运行过程的详细分析，意在剖析清楚Java虚拟机的机理。 </p>
		</div>
<img src ="http://www.blogjava.net/sunfruit/aggbug/59470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-07-21 18:14 <a href="http://www.blogjava.net/sunfruit/archive/2006/07/21/59470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Oracle Spatial新驱动的查询记录实例</title><link>http://www.blogjava.net/sunfruit/archive/2006/07/20/59202.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Thu, 20 Jul 2006 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/07/20/59202.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/59202.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/07/20/59202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/59202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/59202.html</trackback:ping><description><![CDATA[
		<p>--sunfruit<br />    Oracle的空间数据库的操作驱动更新了，新的驱动适用于Oracle8.0或以上，新驱动在对数据库的操作上面和原有的驱动差别比较大，不过有一点：使用变得简单了<br />    建立空间数据库和建立空间索引的步骤就略过了，那些网上有很多例子，而且实现方式上面也没有变化，下面列出查询空间数据库记录的代码：<br /><br />import java.sql.DriverManager;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import oracle.spatial.geometry.JGeometry;<br />import java.sql.PreparedStatement;<br />import oracle.sql.STRUCT;<br />import java.sql.Connection;</p>
		<p>/**<br /> * &lt;p&gt;Title: &lt;/p&gt;<br /> *<br /> * &lt;p&gt;Description: &lt;/p&gt;<br /> *<br /> * &lt;p&gt;Copyright: Copyright (c) 2006&lt;/p&gt;<br /> *<br /> * &lt;p&gt;Company: &lt;/p&gt;<br /> *<br /> * @author sunfruit<br /> * @version 1.0<br /> */<br />public class SdoSelect {<br />  public SdoSelect() {<br />  }<br />  public static void main(String[] args) {<br />    String driver = "oracle.jdbc.driver.OracleDriver";<br />    String url = "jdbc:oracle:thin:@172.16.75.200:1521:starmap";<br />    String uid = "hmbst";<br />    String psw = "hmbst";<br />    Connection conn = null;<br />    PreparedStatement ps=null;<br />    try {<br />      Class.forName(driver);<br />      conn = DriverManager.getConnection(url, uid, psw);</p>
		<p>      JGeometry jGeometry=new JGeometry(41884696,14377039,42884696,14477039,0);<br />      STRUCT obj =jGeometry.store(jGeometry,conn);<br />      String sql = "SELECT * FROM POISDO p WHERE sdo_filter(p.gshape,?,'querytype=window')='TRUE'";<br />      ps = conn.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);<br />      ps.clearParameters();<br />      ps.setObject(1, obj);<br />      // 插入点地物记录<br />      ResultSet rs=ps.executeQuery();<br />      while(rs.next())<br />      {<br />        STRUCT st = (oracle.sql.STRUCT)rs.getObject("gshape");<br />        JGeometry j_geom = JGeometry.load(st);<br />        double[] dou=j_geom.getPoint();<br />        String buff="";<br />        for(int i=0;i&lt;dou.length;i++)<br />        {<br />          buff=buff+String.valueOf((int)dou[i])+"   ";<br />        }<br />        System.out.println(buff);<br />      }<br />    }<br />    catch (Exception ex) {<br />      ex.printStackTrace();<br />    }<br />    finally<br />    {<br />      if(conn!=null)<br />      {<br />        try {<br />          conn.close();<br />        }<br />        catch (SQLException ex) {<br />          ex.printStackTrace();<br />        }<br />      }<br />      if(ps!=null)<br />      {<br />        try {<br />          ps.close();<br />        }<br />        catch (SQLException ex) {<br />          ex.printStackTrace();<br />        }<br />      }</p>
		<p>    }<br />  }</p>
		<p>}<br /><br />表POISDO的结构如下<br />create table poi (<br />  id INTEGER,<br />  gname VARCHAR2(256),<br />  gshape MDSYS.SDO_GEOMETRY);</p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/59202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-07-20 15:28 <a href="http://www.blogjava.net/sunfruit/archive/2006/07/20/59202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Oracle Spatial新驱动的添加记录实例</title><link>http://www.blogjava.net/sunfruit/archive/2006/07/20/59198.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Thu, 20 Jul 2006 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/07/20/59198.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/59198.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/07/20/59198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/59198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/59198.html</trackback:ping><description><![CDATA[
		<p>    --sunfruit<br />    Oracle的空间数据库的操作驱动更新了，新的驱动适用于Oracle8.0或以上，新驱动在对数据库的操作上面和原有的驱动差别比较大，不过有一点：使用变得简单了<br />    建立空间数据库和建立空间索引的步骤就略过了，那些网上有很多例子，而且实现方式上面也没有变化，下面列出添加一条空间数据库记录的代码：<br /><br />import java.sql.*;<br />import oracle.sql.*;<br />import oracle.spatial.geometry.JGeometry;<br /><br />/**<br /> * &lt;p&gt;Title: &lt;/p&gt;<br /> *<br /> * &lt;p&gt;Description: &lt;/p&gt;<br /> *<br /> * &lt;p&gt;Copyright: Copyright (c) 2006&lt;/p&gt;<br /> *<br /> * &lt;p&gt;Company: &lt;/p&gt;<br /> *<br /> * @author not attributable<br /> * @version 1.0<br /> */<br />public class SdoAdd {<br />  public static void main(String[] args) {<br />    String driver = "oracle.jdbc.driver.OracleDriver";<br />    String url = "jdbc:oracle:thin:@172.16.75.200:1521:starmap";<br />    String uid = "hmbst";<br />    String psw = "hmbst";<br />    Connection conn = null;<br />    PreparedStatement ps=null;<br />    try {<br />      Class.forName(driver);<br />      conn = DriverManager.getConnection(url, uid, psw);<br />      <br />      JGeometry jGeometry=new JGeometry(41884696,14377039,0);<br />      STRUCT obj =jGeometry.store(jGeometry,conn);<br />      String sql =<br />          "insert into POISDO values(seq_poi_id.nextval,?,?)";<br />      ps = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);<br />      ps.clearParameters();<br />      ps.setString(1, "我的家");<br />      ps.setObject(2, obj);<br />      // 插入点地物记录<br />      ps.executeUpdate();<br />      conn.commit();<br />    }<br />    catch (Exception ex) {<br />      ex.printStackTrace();<br />    }<br />    finally<br />    {<br />      if(conn!=null)<br />      {<br />        try {<br />          conn.close();<br />        }<br />        catch (SQLException ex) {<br />          ex.printStackTrace();<br />        }<br />      }<br />      if(ps!=null)<br />      {<br />        try {<br />          ps.close();<br />        }<br />        catch (SQLException ex) {<br />          ex.printStackTrace();<br />        }<br />      }</p>
		<p>    }<br />  }<br />}<br /><br />表POISDO的结构如下<br />create table poi (<br />  id INTEGER,<br />  gname VARCHAR2(256),<br />  gshape MDSYS.SDO_GEOMETRY);</p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/59198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-07-20 15:25 <a href="http://www.blogjava.net/sunfruit/archive/2006/07/20/59198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转贴]JAVA截取当前屏幕生成图片的代码</title><link>http://www.blogjava.net/sunfruit/archive/2006/06/27/55319.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 27 Jun 2006 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/06/27/55319.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/55319.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/06/27/55319.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/55319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/55319.html</trackback:ping><description><![CDATA[
		<p>import java.awt.Dimension; <br />import java.awt.Rectangle; <br />import java.awt.Robot; <br />import java.awt.Toolkit; <br />import java.awt.image.BufferedImage; <br />import java.io.File; </p>
		<p>import javax.imageio.ImageIO; </p>
		<p>/******************************************************************* <br /> * 该JavaBean可以直接在其他Java应用程序中调用，实现屏幕的"拍照" <br /> * This JavaBean is used to snapshot the GUI in a  <br /> * Java application! You can embeded <br /> * it in to your java application source code, and us <br /> * it to snapshot the right GUI of the application <br /> * @see javax.ImageIO <br /> * @author liluqun ([email]liluqun@263.net[/email]) <br /> * @version 1.0 <br /> * <br /> *****************************************************/ </p>
		<p>public class GuiCamera <br />{   <br />    private String fileName; //文件的前缀 <br />    private String defaultName = "GuiCamera"; <br />    static int serialNum=0; <br />    private String imageFormat; //图像文件的格式 <br />    private String defaultImageFormat="png"; <br />    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); </p>
		<p>    /**************************************************************** <br />     * 默认的文件前缀为GuiCamera，文件格式为PNG格式 <br />     * The default construct will use the default  <br />     * Image file surname "GuiCamera",  <br />     * and default image format "png" <br />     ****************************************************************/ <br />    public GuiCamera() { <br />      fileName = defaultName; <br />      imageFormat=defaultImageFormat; <br />     <br />    } </p>
		<p>    /**************************************************************** <br />     * @param s the surname of the snapshot file <br />     * @param format the format of the  image file,  <br />     * it can be "jpg" or "png" <br />     * 本构造支持JPG和PNG文件的存储 <br />     ****************************************************************/ <br />    public GuiCamera(String s,String format) { <br />     <br />      fileName = s; <br />      imageFormat=format; <br />    } <br />     <br />    /**************************************************************** <br />     * 对屏幕进行拍照 <br />     * snapShot the Gui once <br />     ****************************************************************/ <br />    public void snapShot() { <br />     <br />      try { <br />      //拷贝屏幕到一个BufferedImage对象screenshot <br />        BufferedImage screenshot = (new Robot()).createScreenCapture(new <br />            Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight())); <br />        serialNum++; <br />        //根据文件前缀变量和文件格式变量，自动生成文件名 <br />        String name=fileName+String.valueOf(serialNum)+"."+imageFormat; <br />        File f = new File(name); <br />        System.out.print("Save File "+name); <br />      //将screenshot对象写入图像文件 <br />        ImageIO.write(screenshot, imageFormat, f); <br />        System.out.print("..Finished!\n"); <br />      } <br />      catch (Exception ex) { <br />        System.out.println(ex); <br />      } <br />    } </p>
		<p>    public static void main(String[] args) <br />    { <br />        GuiCamera cam= new GuiCamera("d:\\Hello", "png");// </p>
		<p>        cam.snapShot(); <br />    } <br />}</p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/55319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-06-27 13:57 <a href="http://www.blogjava.net/sunfruit/archive/2006/06/27/55319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全文检索技术概述</title><link>http://www.blogjava.net/sunfruit/archive/2006/04/05/39276.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 04 Apr 2006 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/04/05/39276.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/39276.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/04/05/39276.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/39276.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/39276.html</trackback:ping><description><![CDATA[--sunfruit<br /><br />        最近<font color="#000000">做了一个资料管理软件用来管理日常资料，编写好了基本功能以后总是感觉这个软件缺少了什么，是的，是全文检索，没有全文检索功能，这个管理软件用到最后也一定对于查找资料相当困难，于是加紧赶工加上了作为基本功能的全文检索。<br />        有人了解检索技术，而且也不是什么高深技术，我也不班门弄斧，就是把原理大概介绍一下，感兴趣的朋友也可以自己尝试编写一下。<br />        全文检索技术其实就是用空间换时间--用硬盘空间换取检索时间。<br />        首先需要字索引，要想建立字索引就需要字库，这个字库其实就是每一个汉字，大概6000个汉字左右吧，再加上a-z，A-Z，0-9，基本上就可以作为字索引的字库了，然后就是利用字库生成字索引。<br />        生成字索引的原来就是以字库为基础，为字库里面的每一个字做索引，在每一个文章里面做匹配，把一个文章里面所有的匹配的位置记录下来，举个例子：比如字库里面的"啊"，如果现在要建立"啊"的索引，那么要遍历所有要做索引的文章，把所有的"啊"的位置要记录下来，当然要可以区分位置是哪个文章的，要不然混成一堆，就没有意义了[因为最后检索索引的最终目的是要定位出文章的ID]，这样就形成了字索引。依此类推，所有汉字的字索引，索引建立就完成了<br />        检索索引，这个是关键的关键，速度是否快，全看这里，当然索引建立的合理与否也能影响检索速度，举个例子：比如要查询"业务"这个关键词，<br />        首先在字索引中查到"业": 在文件号11111 中的位置有11，40，99  在文件号11112 中的位置有22，33，45<br />         然后在字索引中查到"务": 在文件号11111 中的位置有12，66，100  在文件号11112 中的位置有27，39，60<br /><br />        经过计算会得到命中的文件号为 11111 ，因为业务必须位置号码要连续的出现才算命中<br /><br />        大概的思路就是这样<br />       当然检索技术还会有词索引技术，根据字索引可以进一步生成词索引，并且有切词技术。。。就不多说了<br />       <br />        那个资料管理软件的DEMO下载地址 <a href="/sunfruit/archive/2006/04/01/38625.html">http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html</a><br />        DEMO的界面样式如下<br />        检索界面<br />        <img height="243" alt="Shell00.jpg" src="http://www.blogjava.net/images/blogjava_net/sunfruit/Shell00.jpg" width="515" border="0" /><br />        主界面<br />        <img height="344" alt="Shell01.jpg" src="http://www.blogjava.net/images/blogjava_net/sunfruit/Shell01.jpg" width="563" border="0" /><br /><br />        注意：使用全文检索的时候，首先要生成索引[在工具菜单栏里面]，并且不能重复生成同一个文章的索引，而只能重新生成，这个在生成的时候有选项，因为如果重复生成那么在字索引里面就会重复记录，到时候检索的时候就会检索出来多个同样的文章了<br /></font><img src ="http://www.blogjava.net/sunfruit/aggbug/39276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-04-05 00:20 <a href="http://www.blogjava.net/sunfruit/archive/2006/04/05/39276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]资料管理软件</title><link>http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 01 Apr 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/38625.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/38625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/38625.html</trackback:ping><description><![CDATA[<p>--sunfruit<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整天和电脑打交道，信息资料随着时间的推移也积累的越来越多，直到从资料里面找到所需的资料越来越难，于是就编写了一个资料管理软件，用于管理日常资料<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库：在数据的存储方面为了方便，使用了Access<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDK ：使用的JDK版本是1.5</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相关说明：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正本的保存：由于正文包含图片和样式，所以采取了将正文的文档对象序列化到数据库中的方式进行保存和读取<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;附件的保存：和正文的保存方式一样<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于涉及的功能比较多，所以只是实现了最基本的功能，其他的功能逐步添加和完善，软件的界面样式如下<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注：<font style="BACKGROUND-COLOR: #ffffff" color=#ff1493>数据检索功能已经完成[使用全文检索技术实现]<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height=344 alt=Shell01.jpg src="http://www.blogjava.net/images/blogjava_net/sunfruit/Shell01.jpg" width=563 border=0><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;自从JDK1.5的推出，JAVA的界面风格比原来漂亮多了<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;demo下载地址：<a href="http://www.fruitres.cn/useruploadfile/4/1473814960_demo.rar">http://www.fruitres.cn/useruploadfile/4/1473814960_demo.rar</a>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;演示地址：<a href="http://www.fruitres.cn/useruploadfile/4/1473814960_jnlp.jnlp">http://www.fruitres.cn/useruploadfile/4/1473814960_jnlp.jnlp</a><br><a href="http://www.sunfruit.org/demofile/datamanager/datamanager.jnlp"></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用过程中发现问题欢迎指正和交流<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/38625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-04-01 17:05 <a href="http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[技巧]使用java web start发布application程序已经进行了数字签名，但是访问还是不能访问用户的IO系统解决办法</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/14/35211.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 14 Mar 2006 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/14/35211.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/35211.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/14/35211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/35211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/35211.html</trackback:ping><description><![CDATA[--sunfruit<BR><BR>其实解决办法很简单<BR><BR>首先保证进行了正确的数字签名<BR><BR>然后使用java web start 发布application一定会有jnlp文件，关键就在这里<BR><BR>在jnlp文件里面添加<BR>&nbsp; &lt;security&gt;<BR>&nbsp;&nbsp; &lt;all-permissions/&gt;<BR>&nbsp; &lt;/security&gt;<BR>这几行就可以了，当用户执行了app的时候，会弹出提示框提示用户是否信任xxx证书，当用户选择信任以后就可以访问本地系统了<img src ="http://www.blogjava.net/sunfruit/aggbug/35211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-14 12:27 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/14/35211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[JAVA]使用JAVA的数字签名</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/14/35209.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 14 Mar 2006 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/14/35209.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/35209.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/14/35209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/35209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/35209.html</trackback:ping><description><![CDATA[--sunfruit<BR><BR>在使用java web start发布Application还有在网页上面发布Applet的时候如果不进行数字签名，那么会有安全级别的限制，并且在程序界面的最下面会有Application window 的字样，很是不爽，只要是进行了数字签名这些苦恼就没有了，而且也可以访问用户的本地IO系统，下面就说一下如何进行数据签名<BR><BR>其实签名过程很简单，JDK自身就有工具可以进行签名，下面的过程中 xxxx 表示该内容是自定义的<BR><BR>第一部生成 keystore 文件<BR>keytool -genkey -keystore xxxx.keystore -alias xxxx&nbsp; 例如[keytool -genkey -keystore sunfruit.keystore -alias sunfruit]<BR>这个过程比较繁琐，要填写好几项内容，比如生成的keystore文件为 sunfruit.keystore ,下面需要使用<BR><BR>第二步进行数据签名，呵呵，快吧<BR>jarsigner -keystore sunfruit.keystore xxxx.jar sunfruit<BR>命令行中的xxxx.jar是要进行签名的jar文件<BR><BR>第二步进行完毕以后，jar文件就已经签名完毕了，可以使用，当然还有一些其他的功能，比如导出cer文件<BR>keytool -export -keystore sunfruit.keystore -alias sunfruit -file sunfruit.cer<BR><BR>简单吧，其实签名--就是这么简单<img src ="http://www.blogjava.net/sunfruit/aggbug/35209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-14 12:20 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/14/35209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[JAVA]使用HttpURLConnection进行POST方式提交</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/13/35048.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Mon, 13 Mar 2006 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/13/35048.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/35048.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/13/35048.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/35048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/35048.html</trackback:ping><description><![CDATA[<P>--sunfruit<BR><BR>用HttpURLConnection进行Post方式提交，下面给出一个例子<BR><BR>&nbsp;&nbsp;&nbsp; URL url = null;<BR>&nbsp;&nbsp;&nbsp; HttpURLConnection httpurlconnection = null;<BR>&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url = new URL("<A href="http://xxxx">http://xxxx</A>");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection = (HttpURLConnection) url.openConnection();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.setDoOutput(true);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.setRequestMethod("POST");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String username="username=02000001";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.getOutputStream().write(username.getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.getOutputStream().flush();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.getOutputStream().close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int code = httpurlconnection.getResponseCode();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("code&nbsp;&nbsp; " + code);</P>
<P>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch(Exception e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; finally<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(httpurlconnection!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpurlconnection.disconnect();<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>其中HttpURLConnection中的addRequestProperty方法，并不是用来添加Parameter 的，而是用来设置请求的头信息，比如：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRequestProperty("Content-type","text/html");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRequestProperty("Connection",&nbsp;&nbsp; "close");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRequestProperty("Content-Length",xxx);<BR><BR>当然如果不设置的话，可以走默认值，上面的例子中就没有进行相关设置，但是也可以正确执行</P><img src ="http://www.blogjava.net/sunfruit/aggbug/35048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-13 15:47 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/13/35048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA在已有图片上面画图报错UnsupportedOperationException的解决办法</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/11/34818.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 11 Mar 2006 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/11/34818.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/34818.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/11/34818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/34818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/34818.html</trackback:ping><description><![CDATA[--sunfruit<BR><BR>　　前一段时间写了一个<A href="/sunfruit/archive/2006/02/20/31631.html">[原创]JAVA中图片上叠加文字的方法</A>,本来这方面的例子在网络上面很多，而且当时写的时候也没有遇到什么问题，所以也没有什么感觉要注意的地方<BR>　　昨天由于一些原因需要在一个已有的图片上面画点，然后再显示出来，感觉上和<A href="/sunfruit/archive/2006/02/20/31631.html">[原创]JAVA中图片上叠加文字的方法</A>很类似，也就没当回事按照自己的思路就写了，很容易想到读取已存在的图片内容然后生成<BR>　　ImageIcon imageIcon=new ImageIcon(bytes);&nbsp;&nbsp;&nbsp; 对象然后生成<BR>　　Image image=imageIcon.getImage();&nbsp;&nbsp;&nbsp; 对象，这个时候只要是从image实例里面获得Graphics对象就可以对图片进行编辑了但是下面这步却报错了<BR>　　Graphics g =image.getGraphics(); //这步抱错：UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)<BR>　　怎么调试都不行，于是google一把，发现遇到这个问题的人不少，解决办法是不能从Image对象获得Graphics，而是要从BufferedImage对象获得Graphics，于是调整思路将代码修改为<BR>　　BufferedImage bufferedImage=new BufferedImage(imageIcon.getIconHeight(),imageIcon.getIconWidth(),BufferedImage.TYPE_INT_RGB);<BR>　　Graphics2D g=(Graphics2D)bufferedImage.getGraphics();这次测试通过可以获得Graphics对象了<BR><BR>　　这里说明一点：Graphics g =image.getGraphics(); 这一步如果是从Java的图形组件里面获得的Image对象，然后获得Graphics对象就不会有问题<BR>　　在已有的图片上面画图的完整例子见：<A href="/sunfruit/archive/2006/03/11/34808.html">[原创]JAVA在已有图片上面画图的实例</A><img src ="http://www.blogjava.net/sunfruit/aggbug/34818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-11 13:56 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/11/34818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA在已有图片上面画图的实例</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/11/34808.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 11 Mar 2006 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/11/34808.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/34808.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/11/34808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/34808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/34808.html</trackback:ping><description><![CDATA[<DIV><FONT size=2>--sunfruit<BR><BR>简介：JAVA在已有图片上面画图的实例，下面的程序在已有的图片上面画了一个蓝色的方块<BR><BR>import java.awt.Color;<BR>import java.awt.Graphics;<BR>import java.awt.Graphics2D;<BR>import java.awt.image.BufferedImage;<BR>import java.io.FileInputStream;<BR>import javax.imageio.ImageIO;<BR>import javax.swing.ImageIcon;<BR>import java.util.Random;<BR>import java.io.IOException;<BR>import java.io.File;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>public class ImageTest {<BR>&nbsp; public ImageTest() throws Exception {<BR>&nbsp;&nbsp;&nbsp; String ext="png";<BR>&nbsp;&nbsp;&nbsp; FileInputStream in = new FileInputStream("已有图片的路径");<BR>&nbsp;&nbsp;&nbsp; byte[] bytes = new byte[in.available()];<BR>&nbsp;&nbsp;&nbsp; in.read(bytes);<BR>&nbsp;&nbsp;&nbsp; in.close();<BR>&nbsp;&nbsp;&nbsp; Random random=new Random(System.currentTimeMillis());<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ImageIcon imageIcon = new ImageIcon(bytes);<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; BufferedImage bufferedImage=new BufferedImage(imageIcon.getIconHeight(),imageIcon.getIconWidth(),BufferedImage.TYPE_INT_RGB);<BR>&nbsp;&nbsp;&nbsp; Graphics2D g=(Graphics2D)bufferedImage.getGraphics();<BR>&nbsp;&nbsp;&nbsp; g.setColor(Color.blue);<BR>&nbsp;&nbsp;&nbsp; g.drawRect(5,5,5,5);<BR>&nbsp;&nbsp;&nbsp; g.fillRect(5,5,5,5);<BR>&nbsp;&nbsp;&nbsp; g.drawImage(imageIcon.getImage(),0,0,imageIcon.getIconHeight(),imageIcon.getIconWidth(),imageIcon.getImageObserver());</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; String filepath = System.getProperty("java.io.tmpdir") + random.nextInt(99999) + "." + ext;<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIO.write(bufferedImage, ext,&nbsp; new File(filepath));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件已经生成，路经为" + filepath);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (IOException ex) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV>&nbsp;</DIV><FONT size=2>
<DIV><BR>&nbsp; }</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; /**<BR>&nbsp;&nbsp; * @param args<BR>&nbsp;&nbsp; */<BR>&nbsp; public static void main(String[] args) throws Exception {<BR>&nbsp;&nbsp;&nbsp; new ImageTest();<BR>&nbsp; }</DIV>
<DIV>&nbsp;</DIV>
<DIV>}</FONT></DIV><img src ="http://www.blogjava.net/sunfruit/aggbug/34808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-11 12:39 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/11/34808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA中图片上叠加文字的方法</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/20/31631.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Mon, 20 Feb 2006 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/20/31631.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31631.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/20/31631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31631.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; --sunfruit<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; JDK:1.3.x以上<BR>&nbsp;&nbsp;&nbsp;&nbsp;功能:下面是一个简单在图片上面叠加文字的方法，有朋友如果有这方面的问题，就起个了解的作用<BR><BR>&nbsp;&nbsp;&nbsp; 代码如下:<BR><BR>import java.io.IOException;<BR>import javax.imageio.ImageIO;<BR>import java.io.File;<BR>import java.awt.Font;<BR>import java.awt.Graphics2D;<BR>import java.awt.Color;<BR>import java.awt.image.BufferedImage;<BR>import java.util.Random;</P>
<P>/**<BR>&nbsp;* &lt;p&gt;Title: 图片叠加文字类&lt;/p&gt; <BR>&nbsp;* &lt;p&gt;Description: &lt;/p&gt; <BR>&nbsp;* &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt; <BR>&nbsp;* &lt;p&gt;Company: &lt;/p&gt;<BR>&nbsp;* @author sunfruit<BR>&nbsp;* @version 1.0<BR>&nbsp;*/<BR>public class ImageAddWord {<BR>&nbsp;&nbsp;&nbsp; Random random=new Random(System.currentTimeMillis());<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; BufferedImage buffImage=null;</P>
<P>&nbsp;&nbsp;&nbsp; Graphics2D g=null;</P>
<P>&nbsp;&nbsp;&nbsp; public ImageAddWord(int width, int height) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffImage=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; public ImageAddWord()<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this(32,32);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * 图片生成方法,如果需要在已有的图片叠加文字,需要先调用g.drawImage方法将图片绘制,再将文字绘制<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param str String 文字内容<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param ext String 文件后缀名 png或是jpg<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public void drawWord(String str,String ext)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g=buffImage.createGraphics();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果要在已有的图片叠加文字,这里调用g.drawImage()该方法,绘制图片,酌情去掉下面的方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(Color.WHITE);//在已有的图片叠加文字时 该方法酌情添加<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(0, 0, buffImage.getWidth(), buffImage.getHeight());//在已有的图片叠加文字时 该方法酌情添加<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(Color.BLACK);//设定文字颜色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.drawString(str,0,12);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filepath=System.getProperty("java.io.tmpdir") +random.nextInt(99999)+"." + ext;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageIO.write(buffImage, ext,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(filepath));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件已经生成，路经为"+filepath);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException ex) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; public void setFont(Font font)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setFont(font);<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageAddWord imageAddWord=new ImageAddWord(132,16);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str="A B C";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageAddWord.drawWord(str,"png");</P>
<P>&nbsp;&nbsp;&nbsp; }</P>
<P>}</P><img src ="http://www.blogjava.net/sunfruit/aggbug/31631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-20 13:36 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/20/31631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA桌面程序启动的预显窗口实例</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31556.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31556.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31556.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31556.html</trackback:ping><description><![CDATA[
		<p>--sunfruit 
</p>
		<p>    用JAVA编写的桌面程序启动的预显窗口实例</p>
		<p>    简介：<br />        程序启动会预先显示一个预显窗口，主程序启动完毕后预显窗口关闭<u><font color="#0000ff"><br /></font></u><br />    欢迎大家提意见，交流</p>
		<p>   下载地址<br />    说明：apprun.jar可以直接运行 src中是源代码<br />    <a href="/Files/sunfruit/apprunmodel.rar">http://www.blogjava.net/Files/sunfruit/apprunmodel.rar</a><a href="/Files/sunfruit/comm.rar"></a><a href="/Files/sunfruit/apprunmodel.rar"></a></p>
<img src ="http://www.blogjava.net/sunfruit/aggbug/31556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 21:53 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]java的web开发模式下限制用户同时多次登录</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31531.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31531.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31531.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31531.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31531.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit 
<P>&nbsp;&nbsp;&nbsp; 开发web相关程序的时候总是要遇到限制用户不能使用同一个帐号同时多次登录的问题，我从三个方向对这样的问题做了监控<BR>&nbsp;&nbsp;&nbsp; 1，用户登录以后点击注销推出<BR>&nbsp;&nbsp;&nbsp; 2，用户点击IE的 X 关闭里IE窗口<BR>&nbsp;&nbsp;&nbsp; 3，用户的session过期<BR>&nbsp;&nbsp;&nbsp; 只要是监控了以上三点，就能满足绝大部分的要求，以上是一个思路，有一个缺陷，就是如果客户机突然断电，那么只有session过期了以后才能登录，这个地方是一个缺陷。</P>
<P>&nbsp;&nbsp;&nbsp; 下面给出具体的实现代码，如果大家有更好的办法，欢迎交流，共同进步<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <A href="http://sunfruit.bokee.com/inc/session.rar"><FONT color=#770000>http://sunfruit.bokee.com/inc/session.rar</FONT></A><BR>&nbsp;&nbsp;&nbsp; 附件说明 :<BR>&nbsp;&nbsp;&nbsp; 1.工程使用JB做的，使用了log4j，log4j的包在工程的WEB-INF的LIB文件夹内，取出后重新引用。 <BR>&nbsp;&nbsp;&nbsp; 2.可以直接发布war包，直接可以测试</P><img src ="http://www.blogjava.net/sunfruit/aggbug/31531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 18:09 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVA编写的使用手机串口发送短信的程序</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31530.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31530.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31530.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31530.html#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31530.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit 
<P>&nbsp;&nbsp;&nbsp; 用JAVA编写的使用手机串口发送短信的程序</P>
<P>&nbsp;&nbsp;&nbsp; 功能简介：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;手机通过串口与电脑连接以后，就可以使用该程序发送短信<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果是红外连接那么可以使用红外模拟串口的软件进行转换即可<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 红外模拟串口的软件下载地址<A href="http://heart5.chinap4.com/moto388/connect/ircomm2k/download.html"><FONT color=#770000>http://heart5.chinap4.com/moto388/connect/ircomm2k/download.html</FONT></A><BR>&nbsp;&nbsp;&nbsp; 欢迎大家提意见，交流</P>
<P>&nbsp;&nbsp; 可以直接运行的程序下载地址，环境配置参考包中的txt<BR>&nbsp;&nbsp; <A HREF="/Files/sunfruit/comm.rar">http://www.blogjava.net/Files/sunfruit/comm.rar</A><A href="http://sunfruit.bokee.com/inc/comm.rar"><FONT color=#770000></FONT></A><BR><BR>&nbsp;&nbsp;&nbsp; 源代码下载地址<BR>&nbsp;&nbsp;&nbsp; <A HREF="/Files/sunfruit/comm_src.rar">http://www.blogjava.net/Files/sunfruit/comm_src.rar</A></P><img src ="http://www.blogjava.net/sunfruit/aggbug/31530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 18:08 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>