??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一区二区三区在线电影,国产欧美日韩中文久久,国产一区二区中文http://www.aygfsteel.com/feenn/Java开发技巧与实践zh-cnMon, 16 Jun 2025 21:29:30 GMTMon, 16 Jun 2025 21:29:30 GMT60Nonogram求解程?/title><link>http://www.aygfsteel.com/feenn/archive/2020/03/04/435211.html</link><dc:creator>Feenn</dc:creator><author>Feenn</author><pubDate>Wed, 04 Mar 2020 05:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/feenn/archive/2020/03/04/435211.html</guid><wfw:comment>http://www.aygfsteel.com/feenn/comments/435211.html</wfw:comment><comments>http://www.aygfsteel.com/feenn/archive/2020/03/04/435211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/feenn/comments/commentRss/435211.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/feenn/services/trackbacks/435211.html</trackback:ping><description><![CDATA[法是单的逐行逐列剪枝法,只不q加入了(jin)q程的可视化。支持Q意Size的puzzleQ支持三U可视化Ҏ(gu)Q?br /><strong>1.Console字符输出Q?/strong><br /><img src="http://www.aygfsteel.com/images/blogjava_net/feenn/未命?png" border="0" alt="" /><br /><br /><strong>2.Console输入Q带有ANSI Color字符Q需要Terminal支持QW(xu)indows下推荐用cmder{)(j)</strong><br /><img src="http://www.aygfsteel.com/images/blogjava_net/feenn/test.png" border="0" alt="" /><br /><br /><strong>3. H口输出Q在H口中输出结果,支持保存囄Q支持查看每一步?/strong><br /><img src="http://www.aygfsteel.com/images/blogjava_net/feenn/test2.png" border="0" alt="" /><br /><br />源代码:(x)<a >https://github.com/feenn/nonogram</a><img src ="http://www.aygfsteel.com/feenn/aggbug/435211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/feenn/" target="_blank">Feenn</a> 2020-03-04 13:56 <a href="http://www.aygfsteel.com/feenn/archive/2020/03/04/435211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数独解题DemoE序-Sudokuhttp://www.aygfsteel.com/feenn/archive/2019/05/14/433781.htmlFeennFeennTue, 14 May 2019 01:59:00 GMThttp://www.aygfsteel.com/feenn/archive/2019/05/14/433781.htmlhttp://www.aygfsteel.com/feenn/comments/433781.htmlhttp://www.aygfsteel.com/feenn/archive/2019/05/14/433781.html#Feedback0http://www.aygfsteel.com/feenn/comments/commentRss/433781.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/433781.html
  • 可录入初始数字摆攑ָ局
  • 可计题解方案的M敎ͼ当然极限Ҏ(gu)L6670903752021072936960的计朝U了(jin)Q?br />
  • 可自动演C每一?/li>
可手动单步或回退







Feenn 2019-05-14 09:59 发表评论
]]>
Maven-Shade-Plugin打包SWT?qing)JFace遇到的问题及(qing)解决Ҏ(gu)http://www.aygfsteel.com/feenn/archive/2019/04/29/433739.htmlFeennFeennMon, 29 Apr 2019 08:33:00 GMThttp://www.aygfsteel.com/feenn/archive/2019/04/29/433739.htmlhttp://www.aygfsteel.com/feenn/comments/433739.htmlhttp://www.aygfsteel.com/feenn/archive/2019/04/29/433739.html#Feedback0http://www.aygfsteel.com/feenn/comments/commentRss/433739.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/433739.html一、问?/h3> 当开?nbsp;minimizeJar 后,_的Jarq行?x)出现如下错误?x)

The image could not be loaded: FileImageDescriptor(location=class org.eclipse.jface.dialogs.TitleAreaDialog, name=images/title_banner.png)
org.eclipse.jface.resource.DeviceResourceException: Unable to create resource FileImageDescriptor(location=class org.eclipse.jface.dialogs.TitleAreaDialog, name=images/title_banner.png)
        at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:184)
        at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:55)
        at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:88)
        at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:195)
…………

出现q个错误的直接现象是所有的囄——包括图标——都无法正显C?br />

二、分?/h3> 开始以为是resources打包错误D没有被压qjar包,不过分析jar包内容发现ƈ没有文g~失Q然后开始分析minimizeJar的机制。文档上_(d)(x)

<minimizeJar>
When true, dependencies will be stripped down on the class level to only the transitive hull required for the artifact. Note: Usage of this feature requires Java 1.5 or higher.

由此来看Qshade做的只是做了(jin)?rn)态调用分析,q没有做动态类加蝲q行分析Q因此极大可能问题是出在q里?jin)。而且从抛出的异常来看Q有可能是图片文件格式无法解析导致了(jin)囄资源创徏p|?br />
那么之后的调试方法就单了(jin)Q首先上verbose大法Q直接加verbose:class参数Q分别运行正常的和异常的Jar包,从输Z息发C(jin)端倪:(x)

[Loaded java.lang.IndexOutOfBoundsException from C:\Program Files\Java\jre1.8.0_151\lib\rt.jar]
[Loaded java.lang.ArrayIndexOutOfBoundsException from C:\Program Files\Java\jre1.8.0_151\lib\rt.jar]
[Loaded org.eclipse.swt.internal.image.WinBMPFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.GIFFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.WinICOFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGSegment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGFixedSizeSegment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.JPEGStartOfImage from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PNGFileFormat from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngInputStream from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngDecodingDataStream from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngChunkReader from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIhdrChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngFileReadState from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngPlteChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIdatChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngIendChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.image.PngTrnsChunk from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.win32.BITMAPINFOHEADER from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$ToolTipOwnerControlListener from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$$Lambda$19/1873653341 from org.eclipse.jface.window.ToolTip]
[Loaded org.cncert.xac.utils.ResourceManager from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.widgets.ToolItem from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.internal.win32.TBBUTTON from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.resource.AbstractResourceManager$RefCount from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.layout.FormData from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.swt.layout.FormAttachment from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.dialogs.TitleAreaDialog$1 from file:/E:/Temp/*****.jar]
[Loaded org.eclipse.jface.window.ToolTip$TooltipHideListener from file:/E:/Temp/*****.jar]

注意上方U色的字体,在异常的Jar包输Z是没有的Q同时检查了(jin)Jar包中果然没有打包q几个类Q将q几个类手动加入Jar包后Q异常的Jar包可以正常运行了(jin)?br />
从源代码看,q几个类型是SWT在运行时动态加载的Q由 org.eclipse.swt.internal.image.FileFormat 动态加载,相关代码如下Q?br />
package org.eclipse.swt.internal.image;


import java.io.*;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;

/**
 * Abstract factory class for loading/unloading images from files or streams
 * in various image file formats.
 *
 
*/
public abstract class FileFormat {
    static final String FORMAT_PACKAGE = "org.eclipse.swt.internal.image"; //$NON-NLS-1$
    static final String FORMAT_SUFFIX = "FileFormat"; //$NON-NLS-1$
    static final String[] FORMATS = {"WinBMP", "WinBMP", "GIF", "WinICO", "JPEG", "PNG", "TIFF", "OS2BMP"}; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$//$NON-NLS-5$ //$NON-NLS-6$//$NON-NLS-7$//$NON-NLS-8$

    LEDataInputStream inputStream;
    LEDataOutputStream outputStream;
    ImageLoader loader;
    int compression;

static FileFormat getFileFormat (LEDataInputStream stream, String format) throws Exception {
    Class<?> clazz = Class.forName(FORMAT_PACKAGE + '.' + format + FORMAT_SUFFIX);
    FileFormat fileFormat = (FileFormat) clazz.getDeclaredConstructor().newInstance();
    if (fileFormat.isFileFormat(stream)) return fileFormat;
    return null;
}

三、Maven配置的修?/h3> 在官Ҏ(gu)档中Q可以用filter来显式包含不惌minimizeJar优化掉的内容Q但是目前filterq无法做到针对一个artifact中选择性对某个目录下的文g不做优化?br /> 例如Q我希望shade不对org/eclipse/swt/internal/image/**做优化,我的配置是这L(fng)Q?br />
<filter>
     <artifact>org.eclipse:swt.win32.x86_64</artifact>
     <includes>
          <include>org/eclipse/swt/internal/image/**</include>
     </includes>
</filter>

但最l的l果是只打包?jin)这个目录内的类Q而这个artifact中的其他cd部被removedQ因?a >官方demo中有q样一句话Q?br />
As of version 1.6, minimizeJar will respect classes that were specifically marked for inclusion in a filter. Note that specifying an include filter for classes in an artifact implicitly excludes all non-specified classes in that artifact.

所以我只能让shadeswt的artifact全部保留Q不做优化?br />
<filter>
       <artifact>org.eclipse:swt.win32.x86_64</artifact>
       <includes>
                <include>**</include>
       </includes>
</filter>

或者用artifactSet辑ֈ同样的效果?br />

四、ȝ

  1. 目前shade的机制是?rn)态分析,所以可能会(x)优化掉很多动态加载的c,对于使用动态加载较多的工程Q在发布旉要特别注意?
  2. 目前shade的配|无法在一个artifact内显式指定某个\径不优化Q或许有Q但我确实没扑ֈQ欢q知道的朋友留言告知Q,只能昑ּ保留整个artifact不做优化?


Feenn 2019-04-29 16:33 发表评论
]]>
Eclipse更新后手工清理Plugins中旧文g的小E序http://www.aygfsteel.com/feenn/archive/2015/06/11/425625.htmlFeennFeennThu, 11 Jun 2015 06:12:00 GMThttp://www.aygfsteel.com/feenn/archive/2015/06/11/425625.htmlhttp://www.aygfsteel.com/feenn/comments/425625.htmlhttp://www.aygfsteel.com/feenn/archive/2015/06/11/425625.html#Feedback0http://www.aygfsteel.com/feenn/comments/commentRss/425625.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/425625.html
  1. Features目录?x)自动更新无需手工清理?/li>
  2. Plugins目录中的source jar?x)自动清理,而运行jar包会(x)保留之前的一个版本?/li>
Z冗余的考虑Q一般来讲不需要手工清理Plugins目录Q而手工清理通常需要借助TC{工具逐项Ҏ(gu)后删除,需仔细且难保出现错误。因此,写了(jin)一个可自动清理Plugins中旧Jar包的辅助E序?br />该程序通过Ҏ(gu)Plugins中相同包名的Jar包文Ӟ自动删除较旧的Jar包,用了(jin)一些小技巧:(x)
  1. 比较版本时直接用了(jin)文g的修Ҏ(gu)间比较,当然q是一U比较懒的方法,有可能会(x)出错?/li>
  2. 删除时用了(jin)JNA提供的删除到回收站的Ҏ(gu)Q以防出错后可以恢复?/li>
源代码见下?br />
  1 package org.tsinghua.benjamin;
  2 
  3 import java.io.File;
  4 import java.io.FileFilter;
  5 import java.io.IOException;
  6 import java.util.ArrayList;
  7 import java.util.HashMap;
  8 import java.util.Iterator;
  9 import java.util.List;
 10 
 11 import com.sun.jna.platform.FileUtils;
 12 
 13 public class EclipseUpdateCleaner {
 14 
 15 //    private static final String pluginPath = "d:\\Eclipse\\x86\\Luna\\plugins\\";
 16     private static final String pluginPath = "d:\\Eclipse\\x64\\Luna\\plugins\\";
 17     private static final HashMap<String, List<String>> mapDir = new HashMap<>();
 18     private static final HashMap<String, List<String>> mapJar = new HashMap<>();
 19 
 20     private static final class PluginFilter implements FileFilter {
 21 
 22         @Override
 23         public boolean accept(File pathname) {
 24             if (pathname == null || !pathname.exists())
 25                 return false;
 26             if (pathname.isDirectory())
 27                 return true;
 28 
 29             if (pathname.getName().toLowerCase().endsWith(".jar"))
 30                 return true;
 31             return false;
 32         }
 33 
 34     }
 35 
 36     public static void main(String[] args) {
 37         File file = new File(pluginPath);
 38         if(!file.exists() || !file.isDirectory())
 39             return;
 40         
 41         File[] files = file.listFiles(new PluginFilter());
 42         for (File file2 : files) {
 43             String name = file2.getName();
 44             int index = name.indexOf('_');
 45             assert(index > 0);
 46             String key = name.substring(0, index);
 47             String value = name.substring(index + 1);
 48             if(file2.isDirectory()) {
 49                 addToMap(mapDir, key, value);
 50             } else {
 51                 addToMap(mapJar, key, value);
 52             }
 53         }
 54         
 55         System.out.println("---Dir---");
 56         recycleOldJars(mapDir);
 57         
 58         System.out.println("---Jar---");
 59         recycleOldJars(mapJar);
 60     }
 61 
 62     /**
 63      * @param map 
 64      * @param key
 65      * @param value
 66      */
 67     protected static void addToMap(HashMap<String,List<String>> map, String key, String value) {
 68         if(mapDir.containsKey(key)) {
 69             List<String> list = map.get(key);
 70             list.add(value);
 71         } else {
 72             map.put(key, new ArrayList<String>(){
 73                 private static final long serialVersionUID = 7647872335210732416L;
 74 
 75             {
 76                 add(value);
 77             }});
 78         }
 79     }
 80 
 81     /**
 82      * @param fileUtils
 83      * @param iterator
 84      */
 85     protected static void recycleOldJars(HashMap<String, List<String>> map) {
 86         Iterator<String> iterator = map.keySet().iterator();
 87         FileUtils fileUtils = FileUtils.getInstance();
 88         while(iterator.hasNext()) {
 89             String next = iterator.next();
 90             List<String> list = map.get(next);
 91             if(list.size() < 2)
 92                 continue;
 93             else {
 94                 File curr = new File(pluginPath, next + "_" + list.get(0));
 95                 List<File> files = new ArrayList<File>();
 96                 for(int i = 1; i < list.size(); i++) {
 97                     File temp = new File(pluginPath, next + "_" + list.get(i));
 98                     if(temp.lastModified() > curr.lastModified()) {
 99                         files.add(curr);
100                         curr = temp;
101                     }
102                 }
103                 
104                 System.out.println(String.format("[new]%s", curr.getName()));
105                 File[] rs = new File[files.size()];
106                 for (int i = 0; i < rs.length; i++) {
107                     rs[i] = files.get(i);
108                     System.out.println(String.format("\t[delete]%s", rs[i].getName()));
109                 }
110                 
111                 if(fileUtils.hasTrash()) {
112                     try {
113                         fileUtils.moveToTrash(rs);
114                     } catch (IOException e) {
115                         e.printStackTrace();
116                     }
117                 }
118             }
119         }
120     }
121 
122 }
123 


Feenn 2015-06-11 14:12 发表评论
]]>
XULRunner on 64-bit Windowshttp://www.aygfsteel.com/feenn/archive/2013/05/18/399443.htmlFeennFeennSat, 18 May 2013 02:15:00 GMThttp://www.aygfsteel.com/feenn/archive/2013/05/18/399443.htmlhttp://www.aygfsteel.com/feenn/comments/399443.htmlhttp://www.aygfsteel.com/feenn/archive/2013/05/18/399443.html#Feedback0http://www.aygfsteel.com/feenn/comments/commentRss/399443.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/399443.htmlThe browser widget now supports the embedding of XULRunner on Windows x86_64.

l于能支持了(jin)Q?br />
http://download.eclipse.org/eclipse/downloads/drops4/S-4.3M7-201305020800/news/

Feenn 2013-05-18 10:15 发表评论
]]>
Eclipse出现异常后重新指定默认workspace路径的方?/title><link>http://www.aygfsteel.com/feenn/archive/2012/07/27/384176.html</link><dc:creator>Feenn</dc:creator><author>Feenn</author><pubDate>Fri, 27 Jul 2012 08:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/feenn/archive/2012/07/27/384176.html</guid><wfw:comment>http://www.aygfsteel.com/feenn/comments/384176.html</wfw:comment><comments>http://www.aygfsteel.com/feenn/archive/2012/07/27/384176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/feenn/comments/commentRss/384176.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/feenn/services/trackbacks/384176.html</trackback:ping><description><![CDATA[今天H然遇到的这个问题,在网上搜索了(jin)一下,发现在Stack上面也有人遇C(jin)?br /><br />原文在此Q?a >http://stackoverflow.com/questions/7058782/how-to-force-eclipse-to-ask-for-default-workspace</a> <br /><br />症状是这L(fng)Q启动后默认打开一个目录作为workspaceQ该目录是我之前从来没配|过的。无论是在选项中勾?#8220;<span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 18px; text-align: left; background-color: #ffffff; ">Prompt for workspace on startup</span>”Q还是删除eclipse的配|文件均无法再次让eclipse询问q更攚w认workspace路径?br /><br />试过一些方法,比如启动两个eclipse指向同一个\径,q样?x)ɽW二个eclipseq程询问一个新的workspace路径。但是此Ҏ(gu)Ҏ(gu)无效?br /><br />于是在stackoverflow上找C(jin)一个解x(chng)法:(x)命o(h)行执?#8220;eclipse -clean”Q启动eclipseQ然后终于就正常?jin)?br /><br />查了(jin)一下eclipse startup parameters中关于此的解释Q貌似是osgi的一些cache清除?jin)。回忆v之前曄在eclipse假死状态下杀掉了(jin)javawq程Q可能是因此而导致的?br /><br />anywayQ找C(jin)Ҏ(gu)q解决了(jin)此问题,Ҏ(gu)记录?br /><br /><img src ="http://www.aygfsteel.com/feenn/aggbug/384176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/feenn/" target="_blank">Feenn</a> 2012-07-27 16:41 <a href="http://www.aygfsteel.com/feenn/archive/2012/07/27/384176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>曄写的一个猜数字程?/title><link>http://www.aygfsteel.com/feenn/archive/2012/06/01/379765.html</link><dc:creator>Feenn</dc:creator><author>Feenn</author><pubDate>Fri, 01 Jun 2012 12:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/feenn/archive/2012/06/01/379765.html</guid><wfw:comment>http://www.aygfsteel.com/feenn/comments/379765.html</wfw:comment><comments>http://www.aygfsteel.com/feenn/archive/2012/06/01/379765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/feenn/comments/commentRss/379765.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/feenn/services/trackbacks/379765.html</trackback:ping><description><![CDATA[春节闲来无事Q突然想起大一的时候第一ơ学?fn)编E看到的一个演C程序:(x)自己?j)里想一个数字,然后?sh)脑来猜Q当时印象极为深刻,其是用格子的Ş式动态展C机猜数的过E,甚ؓ(f)好看Q于是用?jin)一下午把它写了(jin)出来。今日偶然翻出来觉得挺有意思的Q遂挂出来仅供大家一W~<br /> <br /> 法上基本没有技术含量,当然如果能加入启发式法更好。都是技术活Q纯体力的,用到?jin)之前说q的炚w字符。有兴趣的筒子可以拿ȝ玩?br /> <hr /> <strong>1.</strong> 实现?jin)两U方式的猜数Q计重复位??不计重复位数。每一U还包括数字“包含0”?#8220;不包?”两种情况?br /> <strong>2.</strong> 理论上支持Q意多位数Q但是画囄考虑Q只写了(jin)四位和六位数Q?br /> <br /> <img src="http://www.aygfsteel.com/images/blogjava_net/feenn/无命?png" border="0" alt="" width="400" height="458" data-pinit="registered" /><br /> <br /> <strong>3. </strong>用点阵小灯表C猜数过E:(x)U色点亮灯代表目前可能的数字,熄灭的表CZ可能的;<br /> <img src="http://www.aygfsteel.com/images/blogjava_net/feenn/无命?.png" border="0" alt="" width="800" height="501" data-pinit="registered" /><br /> <br /> <strong>4. </strong>可以判断是否对电(sh)脑说谎?br /> <img src="http://www.aygfsteel.com/images/blogjava_net/feenn/无命?.png" border="0" alt="" width="800" height="364" data-pinit="registered" /><br /> <br /> 当然Q最后猜中了(jin)?sh)脑也可以搞W一把!<br /> <img src="http://www.aygfsteel.com/images/blogjava_net/feenn/无命?.png" border="0" alt="" width="800" height="419" data-pinit="registered" /><br /> <br /> <strong>额外的体力活Q?/strong>支持H口L~放Q可自定义的搞笑短语…………<br /> <hr /><strong> 下蝲</strong>Q?a title="可执行文? href="/Files/feenn/GuessNumber.rar" style="color: #ff0000; ">可执行文?/a>  <a title="源代? href="/Files/feenn/GuessNumber_src.rar" style="color: #00ccff; ">源代?/a><br /> <br /><strong> </strong><strong style="color: #ff6600; ">【重要说明?/strong><br /><strong> </strong><strong style="color: #ff6600; ">1.</strong><span style="color: #ff6600; "> E序中附带的swt库是x64的,如果?2位系l,h换libs下面的swt jar包。然后,要么保持原来的jar包名Uͼ要么修改guess.jar中的manifest文g中的内容Q?/span><br style="color: #ff6600; " /><strong style="color: #ff6600; "> 2.</strong><span style="color: #ff6600; "> 直接双击guess.exe卛_执行Q该文g实际上是一个批处理脚本Q?/span><br style="color: #ff6600; " /><strong style="color: #ff6600; "> 3.</strong><span style="color: #ff6600; "> 源代码无保留发布Qeclipse工程。非认真开发,U属׃Q各位高手多多指教~</span><img src ="http://www.aygfsteel.com/feenn/aggbug/379765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/feenn/" target="_blank">Feenn</a> 2012-06-01 20:58 <a href="http://www.aygfsteel.com/feenn/archive/2012/06/01/379765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java生成炚w字符的思\http://www.aygfsteel.com/feenn/archive/2012/02/16/370140.htmlFeennFeennThu, 16 Feb 2012 11:52:00 GMThttp://www.aygfsteel.com/feenn/archive/2012/02/16/370140.htmlhttp://www.aygfsteel.com/feenn/comments/370140.htmlhttp://www.aygfsteel.com/feenn/archive/2012/02/16/370140.html#Feedback0http://www.aygfsteel.com/feenn/comments/commentRss/370140.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/370140.html
q里以SWTZQ代码如下:(x)
 1 GC gc = new GC(image);
 2 gc.setFont(font); // 讄字体Q事先可以准备好一个字体实?/span>
 3 gc.drawString(ch.toString(), 0, 0);
 4 
 5 
 6 for (int y = 0; y < size.y; y++) {
 7     for (int x = 0; x < size.x; x++) {
 8           int pixel = image.getImageData().getPixel(x, y);
 9           if (pixel != 0xffffff00) {
10 
11                // q里对像素值的判断依赖于gc的前景色和背景色讄Q通过判断则可以对字符上的每一个像素进行操作,生成炚w坐标序列(x, y)
12           }
13      }
14 }
15 
16 gc.dispose();
17 image.dispose();

当然q里可以一ơ性获得一个String的点늟阵,那么需要事先准备多大的image呢?

在SWT中可以用gc.stringExtent(String...)来获取,代码如下Q?font color="#008080" size="2">
1 GC gc = new GC(Display.getDefault()); 
2 gc.setFont(font);
3 Point size = gc.stringExtent(ch.toString()); // 获得?jin)gc实际l制区域的大?/span>
4 gc.dispose();


Feenn 2012-02-16 19:52 发表评论
]]>
wxWidgets整合OpenGL+OpenCV+MathPlot(一UWindows和Linux通用的方?http://www.aygfsteel.com/feenn/archive/2011/01/16/343045.htmlFeennFeennSun, 16 Jan 2011 03:03:00 GMThttp://www.aygfsteel.com/feenn/archive/2011/01/16/343045.htmlhttp://www.aygfsteel.com/feenn/comments/343045.htmlhttp://www.aygfsteel.com/feenn/archive/2011/01/16/343045.html#Feedback2http://www.aygfsteel.com/feenn/comments/commentRss/343045.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/343045.html写在前面Q其实本不应该发在Java斚w的,只是最q在做的目因ؓ(f)实时应用的关pL有用JavaQ因此借这里记录一下心(j)得?/div>
最q在一个在Linux下开攄目中用C(jin)wxWidgetsQ当时在GTK+、QT和wx之间选择?jin)很久,最l确定选择wxWidgets。有兌个框架的详细信息Q请自行google之?/div>

1Q?span class="Apple-tab-span" style="white-space: pre; "> 整合OpenGL

WxWidgets中整合OpenGL是十分简单的Q因为wxWidgets本n对OpenGLq行?jin)封装,因此只需要按照example中的例子q行~写卛_。一U常见的Ҏ(gu)是承wxGLCanvasc,EVT_PAINT的回调函数进行重载即可。一D늤例代码如下:(x)
static int attriblist[] = {
    WX_GL_RGBA, WX_GL_MIN_RED, 
1, WX_GL_MIN_GREEN, 1,
    WX_GL_MIN_BLUE, 
1, WX_GL_DEPTH_SIZE, 1, WX_GL_DOUBLEBUFFER, None
};

BEGIN_EVENT_TABLE(UIOpenGLCanvas, wxGLCanvas)
    EVT_SIZE(UIOpenGLCanvas::OnSize)
    EVT_PAINT(UIOpenGLCanvas::OnPaint)
    EVT_MOUSE_EVENTS(UIOpenGLCanvas::OnMouseEvent)
END_EVENT_TABLE()

UIOpenGLCanvas::UIOpenGLCanvas(wxWindow 
*parent, const wxString &caption)
//    :wxGLCanvas(parent, wxID_ANY, attriblist, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas"), wxNullPalette)
//    :wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas"))
    :wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE, wxT("GLCanvas"), attriblist, wxNullPalette)
    ,m_caption(caption), count(
0) {
    
int argc = 1;
    
char* argv[1= { wxString((wxTheApp->argv)[0]).char_str() };

    
/*
    NOTE: this example uses GLUT in order to have a free teapot model
    to display, to show 3D capabilities. GLUT, however, seems to cause problems
    on some systems. If you meet problems, first try commenting out glutInit(),
    then try comeenting out all glut code
    
*/
    glutInit(
&argc, argv);
}

UIOpenGLCanvas::
~UIOpenGLCanvas() {

}

void UIOpenGLCanvas::OnSize(wxSizeEvent& event) {
    
// this is also necessary to update the context on some platforms
    wxGLCanvas::OnSize(event);

    
// set GL viewport (not called by wxGLCanvas::OnSize on all platforms)
    int w, h;
    GetClientSize(
&w, &h);

    
if (GetContext()) {
        SetCurrent();
        glViewport(
00, (GLint) w, (GLint) h);
    }
}

void UIOpenGLCanvas::OnMouseEvent(wxMouseEvent& event) {
    
static int dragging = 0;
    
static float last_x, last_y;

//    printf("%f %f %d\n", event.GetX(), event.GetY(), (int)event.LeftIsDown());
    if(event.LeftIsDown()) {
        
if(!dragging) {
            dragging 
= 1;
        } 
else {
            yrot 
+= (event.GetX() - last_x)*1.0;
            xrot 
+= (event.GetY() - last_y)*1.0;
            Refresh(
false);
        }
        last_x 
= event.GetX();
        last_y 
= event.GetY();
    } 
else
        dragging 
= 0;

}


void UIOpenGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
    Render();
}

void UIOpenGLCanvas::Render() {
/* 此处很关?nbsp;*/
    wxPaintDC(
this);
    
if (!GetContext())
        
return;
    SetCurrent();

    glClearColor(
0.00.00.00.0);
    glClear(GL_COLOR_BUFFER_BIT 
| GL_DEPTH_BUFFER_BIT);

    glViewport(
00, (GLint)GetSize().x, (GLint)GetSize().y);
    glBegin(GL_POLYGON);
    glColor3f(
1.00.00.0);
    glVertex2f(
0.10.1);
    glVertex2f(
-0.10.1);
    glVertex2f(
-0.1-0.1);
    glVertex2f(
0.1-0.1);
    glEnd();

// using a little of glut
    glColor4f(0,0,1,1);
    glutWireTeapot(
0.4);

    glPopMatrix();

    glFlush();
    SwapBuffers();
}

2Q?span class="Apple-tab-span" style="white-space: pre; "> 整合OpenCV

q个话题在网上有q讨论,在OpenCV中文论坛中提Z(jin)一U向HDCl图的方法。不q这U方法的局限在于:(x)HDC是Windowsq_下特有的l构Q在Linux下是不可行的?/div>
其实OpenCV的核?j)是IplImagel构Q基本上所有的OpenCVl图语句以及(qing)相应的算法都可以通过q个l构衍生出来。因此,一U直接的x(chng)是如何将IplImage转换为wxWidgets中的wxImagecdQ这样就可以直接在wxWidgetsl制IplImagecd的数据了(jin)。于是在|上L后,在一个国外论坛中扑ֈ?jin)现成的代码如下Q?/div>
void copy_and_swap_rb(char *s, char *d, int size)
{
    
// Copy image data source s to destination d, swapping R and B channels.
    
// Assumes 8 bit depth, 3 interleaved channels, and width_step = width*3
    const int step = 3;
    
char *end = s + size;
    
while (s<end) {
        d[
0= s[2];
        d[
1= s[1];
        d[
2= s[0];
        d 
+= step;
        s 
+= step;
    }
}

void wx2cv(wxImage &wx, IplImage *ipl)
{
    
// Copy image data from wxWidgets image to Ipl (opencv) image
    
// Assumes ipl image has seq "GBR", depth 8, and 3 channels, and
    
// has the same size as the wxImage, and width_step = width*3.
    copy_and_swap_rb((char*)wx.GetData(), ipl->imageData, ipl->imageSize);
}

void cv2wx(IplImage *ipl, wxImage &wx )
{
    
// Copy image data from Ipl (opencv) image to wxImage
    
// Assumes ipl image has seq "GBR", depth 8, and 3 channels, and
    
// has the same size as the wxImage, and width_step = width*3.
    copy_and_swap_rb( ipl->imageData, (char*)wx.GetData(),
                      wx.GetWidth()
*wx.GetHeight()*3);
}

IplImage 
*cv_from_wx(wxImage &wx)
{
    
// Return a new IplImage copied from a wxImage.
    
// Must be freed by user with cvReleaseImage().
    IplImage *ret = cvCreateImage(cvSize(wx.GetWidth(), wx.GetHeight()),
                                  IPL_DEPTH_8U, 
3);
    wx2cv(wx, ret);
    
return ret;
}

wxImage wx_from_cv( IplImage 
*cx)
{
    
// Return new wxImage copied from a compatible IplImage.
    
// Assumes ipl image has seq "GBR", depth 8, and 3 channels
    
// Fear not. The copy on return is cheap; does not deep-copy the data.
    wxImage wx(cx->width, cx->height, (unsigned char*) malloc(cx->imageSize), false);
    cv2wx(cx, wx);
    
return wx;
}
q行q样的{换后Q我们就直接可以在wxWidgets中用OpenCV的接口?/div>

3Q?span class="Apple-tab-span" style="white-space: pre; "> 整合MathPlot

MathPlot是sourceforge上的一个开源项目,其功能是使用wxWidgets提供的绘图方法构建操作DCl图的高U接口。这个项目的源代码十分简单,只有两个文gQ但是功能却很实用。我在sourceforge上给?jin)好评?/div>
MathPlot内部实现?jin)坐标u的拖拽、^Ud~放Q将囑Ş划分为LayerQƈ且引入了(jin)动态Layer的概念,卛_q个Layer上绘制的囑Ş可以通过重设局部坐标系的原点基准坐标实现移动,q绘制轨qV而且QMathPlot内部实现?jin)双~冲Q因此,q个框架对于需要实时显Cq的单应用来说具有很好用h(hun)倹{?/div>
׃MathPlot直接使用?jin)wxWidgets的绘图接口,因此其整合十分简单,只需要在需要绘制的Panel上用MathPlot提供的接口即可实现整合?/div>

以上单说明了(jin)wxWidgets如何整合OpenGL、OpenCV和MathPlot三种不同的绘图框Ӟ最后给一个将三种l图Ҏ(gu)用在同一个窗口中实现不同功能的实例:(x)
整合CZ


Feenn 2011-01-16 11:03 发表评论
]]>Javadoc的chm制作http://www.aygfsteel.com/feenn/archive/2010/01/12/309148.htmlFeennFeennTue, 12 Jan 2010 06:22:00 GMThttp://www.aygfsteel.com/feenn/archive/2010/01/12/309148.htmlhttp://www.aygfsteel.com/feenn/comments/309148.htmlhttp://www.aygfsteel.com/feenn/archive/2010/01/12/309148.html#Feedback4http://www.aygfsteel.com/feenn/comments/commentRss/309148.htmlhttp://www.aygfsteel.com/feenn/services/trackbacks/309148.html 最q看?a href="http://www.aygfsteel.com/lishunli/archive/2010/01/07/308618.html">一文?/a>Q其中讲qC(jin)各种Javadoc生成chm的方法及(qing)工具?/p>

其实我一直以来都是用自己写的一个工h生成的,不过q个工具只是生成?hhp?hhc?hhk文gQ最后还需要用FARq行单的~辑和压~。不q我的工具可以配|ƈ识别目录中包含多个API目录的情况,q能够将非API的部分生成TOC文g(之所以要使用FARq行单的~辑Q也是因为非API的TOC部分需要根据情况自׃Ҏ(gu)增减)?/p>


上图是我是用q个工具生成的Eclipse 3.5的chm文档?br />
其实q个q程很简单,我们只需要构造自q文档解析器,q按照hhp、hhc和hhk格式规范生成相应的文件就行了(jin)。其中文档解析器我用了(jin)Java的正则表辑ּ来解析,其解析式的核?j)如下?x)

1 public static final String _INDEX_PATTERN = "<DT><A HREF=\"([\\p{Graph}|\\p{Blank}]*?)\"(\\p{Space}\\p{Alpha}+?=\".*?\")?+><B>(.*?)</B></A>(.*?)\\p{Space}-";
2     public static final String _CONTEXT_PATTERN = "<TD><CODE><B><A HREF=\"((\\p{Graph}*?)#(\\p{Graph}*?))\">(.*?)</A></B>(.*?)</CODE>" ;
3     public static final String _TITLE_PATTERN = "<title>(.*?)</title>";

其中W一行是索引文g条目的表辑ּQ这里我是用了(jin)index-files来生成烦(ch)引的Q当然在没有index-files的时候是使用TOC解析出来的条目构建?br /> W二行是TOC条目的表辑ּQ第三行是提取文件title时用的表达式?br /> 当然q里表达式是有缺L(fng)Q比如不能解析不严格的HTML标签{等Q不q对于我自己而言已经_应付l大多数Javadoc?jin)?br />



Feenn 2010-01-12 14:22 发表评论
]]>
վ֩ģ壺 | ư| żҽ| ʲ| | ޳| | | ԭ| ɽ| ֦| ԫ| | | | ɽ| ƽ| ɽ| ȫ| ƽ| | | | | Ҧ| ϰ| Ȫ| | | | ۰| | | | | | | °Ͷ| | | |