D盘

workspace
posts - 165, comments - 53, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

日历

<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

文章分类

搜索

  •  

最新评论

Cygwin始于1995年,最初作为Cygnus工程师Steve Chamberlain的一个项目。当时Windows NT和Windows 95将COFF作为目标代码,而GNU已经支持x86和COFF,以及C语言库newlib。这样至少在理论上,可以将GCC重定向,作为cross compiler,从而产生能在Windows上运行的可执行程序。在后来的实践中,这很快实现了。

接下来的问题是如何在Windows系统中引导编译器,这需要对Unix的足够模拟,以使GNU configureshell script可以运行,这样就用到像bash这样的shell,进而需要Forkstandard I/O。Windows含有类似的功能,所以Cygwin库只需要进行翻译调用、管理私有数据,比如文件描述符

1996年后,由于看到cygwin可以提供Windows系统上的Cygnus嵌入式工具(以往的方案是使用DJGPP),其他工程师也加入了进来。特别吸引人的是,Cygwin可以实现three-way cross-compile,例如可以在Sun工作站上build,如此就形成Windows-x-MIPS cross-compiler,这样比单纯在PC上编译要快不少。1998年起,Cygnus开始将Cygwin包作为产品来提供。

posted @ 2009-02-13 14:34 巴西木 阅读(217) | 评论 (0)编辑 收藏

来自:http://book.csdn.net/bookfiles/150/1001506504.shtml

3.1  简介

前两章介绍了使用异常的基本概念,重点讨论了处理方式和理由,阐述了工作原理,分析如何在代码中处理异常。本章介绍更高级的主题,具体内容如下:

       如何创建和使用自定义异常。

       异常支持链表和本地化。

       抽象类和接口中的异常用法。

       覆盖方法的异常要求。

       如何用字节码表示异常处理代码。

       应用程序中异常处理操作的效率。

在处理异常时,上述主题并不常用。简单项目根本不使用它们。但在编写较复杂的程序时,这些主题的作用便显示出来了。

3.2  自定义异常

前面讨论了如何处理调用Java API的方法时产生的异常。根据需要,还可创建和使用自定义异常——自我构建表示错误的类。可创建全新异常,并将它们用于应用程序。

使用自定义异常有什么好处呢?为何要定义新异常类型?创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。可以显示代码多个位置之间的错误的相似性,也可区分代码运行时可能出现的相似问题的一个或多个错误,或给出应用程序中一组错误的特定含义。

例如,考虑任何类型的服务器。服务器的基本作用是处理与客户机的通信。若使用标准Java API(java.iojava.net包中的类)来编写服务器,则可使编写的代码在多个位置抛IOException 在设置服务器、等待客户机连接和获取通信流时,可抛出IOExceptions;在通信期间及试图断开连接时,也可抛出IOExceptions。简言之,服务器的各个部分都可能引发IOException

对服务器而言,这些IOException意义不尽相同。虽然由同一异常类型表示,但与各个异常相关的业务含义存在差异,报告和恢复操作亦有不同。可以将一个异常集与服务器配置和启动问题关联,将另一个异常集与客户机通信的实际行动关联,将第三个异常集与服务器关闭任务关联。使用自定义异常,可采用对应用程序有意义的方式来灵活地表示错误。

创建和使用自定义异常并不难。遵循以下3个步骤即可。

3.2.1  定义异常类

一般要定义新类来表示自定义异常。多数情况下,只需创建已有异常类的子类。

1  public class CustomerExistsException extends Exception{

2    public CustomerExistsException(){}

3    public CustomerExistsException(String message){

4      super(message);

5    }

6  }

至少要继承ThrowableThrowable的子类。经常需要定义一个或多个构造函数,以在对象中存储错误消息。如第2-4行所示。在继承任何异常时,将自动继承Throwable类的一些标准特性,如:

       错误消息

       栈跟踪

       异常包装

若要在异常中添加附加信息,则可以为类添加一些变量和方法:

1  public class CustomerExistsException extends Exception{

2    private String customerName;

3    public CustomerExistsException(){}

4     public CustomerExistsException(String message){

5       super(message);

6     }

7     public CustomerExistsException(String message, String customer){

8       super(message);

9       customerName = customer;

10     }

11     public String getCustomerName(){

12       return customerName;

13     }

14  }

由本例可知,可修改CustomerExistsException类,以支持其他属性。例如,可将customerName字符串(引发异常的记录的客户名)与异常联系起来。

3.2.2  声明方法抛出自定义异常

这实际上是“处理或声明”规则的“声明”部分。为了使用自定义异常,必须通知调用代码的类:要准备处理这个异常类型。为此,声明一个或多个方法抛出异常:

public void insertCustomer(Customer c) throws CustomerExistsException{

// The method stores customer information in the database.

// If the customer data already exists, the method creates

// and throws the CustomerExistsException.

}

3.2.3  找到故障点,新建异常并加上关键字throw

最后一步实际上是创建对象,并通过系统传送该对象。为此,需要了解代码将在方法的哪个位置出现故障。根据情况,可能要使用以下部分或所有条件,来指示代码中的故障点。

1. 外部问题

       应用程序中产生的异常

       其他方法返回的故障代码

2. 内部问题

       应用程序状态不一致

       应用程序中的处理问题

在本例中,当不能新建一个客户时会遇到一个故障场景。结果,创建一个异常来表示问题并抛出该问题。如下面的示例方法所示:

1  public void insertCustomer(Customer c)

2    throws CustomerExistsException, SQLException {

3    String selectSql =

4      "SELECT * FROM Customer WHERE first_name=? AND last_name=?";

5    String insertSql = "INSERT INTO Customer VALUES(?, ?)";

6    try{

7      Connection conn = dbmsConnectionFactory.getConnection();

8      PreparedStatement selStmt = conn.prepareStatement(selectSql);

9      selectStmt.setString(1, c.getFirstName());

10      selectStmt.setString(2, c.getLastName());

11      ResultSet rs = selStmt.executeQuery();

12      if (rs.next()){

13        // In this case, the failure condition is produced if you

14        //  can already locate a metching record in the database.

15       throw new CustomerExistsException("Customer exists:" + c, c);

16      }

17      else{

18        PreparedStatement insStmt = conn.prepareStatement(insertSql);

19        insStmt.setString(1, c.getFirstName());

20        insStmt.setString(2, c.getLastName());

21        int status = insStmt.executeUpdate();

22      }

23   }

24   catch (SQLException exc){

Java关键字throw将这个新异常对象传给该方法的调用者。在执行完这3个步骤后,就创建了自定义异常。除非派生一个非检测异常类(RuntimeExceptionError),否则调用方法的任何对象随后将按照“处理或声明”规则解决该异常。

这引出了一个有趣的问题:在自定义异常时,应如何派生?必须在Throwable类层次结构中派生,否则将不能在应用程序中传播异常。另外,不能从Throwable直接派生。Throwable为两类主要问题(ExceptionError)提供行为基础,不能为这棵继承树定义新分支。一般也不要直接继承Error或其任何子类,因为自定义异常通常不符合错误标准(即适当应用程序不应试图捕获的严重问题)

需要从Exception类层次结构中派生。一般地,应将自定义异常定义为故障状态更一般的异常类型的子类。例如,ServerConnectionExceptionjava.io.IOException的子类,因为Server- Connec tionExceptionjava.io.IOException的更具体类型。

如果定义的异常从RuntimeException树继承,是否属于正确的编码实践?若如此,就回避了异常机制,即使声明了异常,类也不必显式处理异常



自定义异常的原则(转)
       “本文是Exception处理的一篇不错的文章,从Java Exception的概念介绍起,依次讲解了Exception的类型(Checked/Unchecked),Exception处理的最佳实现:

1.  选择Checked还是Unchecked的几个经典依据

2.  Exception的封装问题

3.  如无必要不要创建自己得Exception

4.  不要用Exception来作流程控制

5.  不要轻易的忽略捕获的Exception

6.  不要简单地捕获顶层的Exception

——选自JAVADigest.Net对原文的介绍

posted @ 2009-02-13 11:06 巴西木 阅读(594) | 评论 (0)编辑 收藏

界面设计真是一门学问,将来老了可以专门研究这个

UI网:
http://www.worldui.com/news.asp

flash论坛:
http://bbs.actionscript3.cn/forum-6-1.html

还有一个:
http://share.zcool.com.cn/forum-5-1.html


http://www.balsamiq.com/products

posted @ 2009-02-08 14:26 巴西木 阅读(241) | 评论 (0)编辑 收藏

2008年50个最佳CSS设计
http://www.cnbeta.com/articles/71728.htm

Seomoz评出2008最佳Web2.0网站
英文版: http://www.seomoz.org/web2.0/short
中文转载版:http://www.web20share.com/2008/07/seomoz-2008-web-20-awards-winner.html

外媒评出2008年十大消费者Web应用
http://www.cnbeta.com/articles/71967.htm

2008年度10大web平台
http://www.cnbeta.com/articles/71967.htm

Crunchies 2008 评选揭晓(技术奥斯卡大奖)
中文汇总:http://www.20ju.com/content/V66519.htm
The Crunchies 2008 现场报导:http://zjss.bbs.us/?news&t=42835&cat=8
官网:http://crunchies2008.techcrunch.com/

2009年时代杂志评选50大网站
目前只看上一个英语学习的网站:http://www.visuwords.com/

牛人专栏:
Oracle牛人:http://blog.csdn.net/inthirties/category/541079.aspx

posted @ 2009-01-17 15:50 巴西木 阅读(155) | 评论 (0)编辑 收藏

首先认识一下log4j: 
一.Log4j的基本概念
1.Logger: 日志记录器.
日志的级别 级别越低 日志记录将更详细
级别有(由高到底)off,fatal,error,warn,info,debug,all 级别高的可覆盖级别低的日志输出
2.Appender: 输出端 指定日志输出到那个地方.一个Logger可以有多个Appender输出端,每个Appender输出端也可以被多个Logger使用.
常用的输出端有:
ConsoleAppender 将日志输出到控制台
org.apache.log4j.rolling.RollingFileAppender 可指定文件和日期的输出端
WriterAppender 将日志以流格式发送到任何指定的地方
JDBCAppender 通过JDBC把日志输出到数据库中
3.Layout: 日志格式化
log4j有三种Layout:
HTMLLayout 格式化日志输出为HTML表格;
PatternLayout 根据指定的格式(ConversionPattern)格式化日志输出(常用)
SimpleLayout 以非常简单的方式输出

二.配置
1. log4j的配置文件 log4j.xml 
 1<?xml version="1.0" encoding="UTF-8" ?>  
 2<!DOCTYPE configuration >  
 3<configuration xmlns='http://logging.apache.org/' debug="true">  
 4  
 5    <!-- 把日志输出到控制台中 -->  
 6    <appender name="console" class="org.apache.log4j.ConsoleAppender">  
 7        <layout class="org.apache.log4j.PatternLayout">  
 8            <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L)  %m%n" />  
 9        </layout>  
10    </appender>  
11       
12    <!-- 把日志按日期输出到日期日志文件中 -->  
13    <appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">  
14        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">  
15            <param name="FileNamePattern" value="${catalina.home}/log4jlogs/mywebsite.%d{yyyy-MM-dd}.log.zip" />  
16        </rollingPolicy>  
17        <layout class="org.apache.log4j.PatternLayout">  
18            <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} %p [%t] %C{2} (%F:%L) - %m%n" />  
19        </layout>  
20    </appender>  
21       
22  
23    <!-- 终端日志文件 -->  
24    <appender name="terminal-logger" class="org.apache.log4j.DailyRollingFileAppender">  
25        <param name="File" value="${catalina.home}/logs/kiosks/TerminalService.log" />  
26        <param name="Append" value="true" />  
27        <layout class="org.apache.log4j.PatternLayout">  
28            <param name="ConversionPattern" value="%d{MM-dd HH:mm:ss} [%p] [%t] (%F:%L): %m%n" />  
29        </layout>  
30        <filter class="org.apache.log4j.varia.LevelRangeFilter">  
31            <param name="levelMin" value="INFO" />  
32            <param name="AcceptOnMatch" value="true" />  
33        </filter>  
34    </appender>  
35    <logger name="com.macaufly.kiosks">  
36        <level value="INFO" />  
37        <appender-ref ref="terminal-logger" />  
38    </logger>  
39  
40               
41    <!-- 设置接收所有输出的通道(但在logger中定义的级别在这里不起作用) -->  
42    <root>  
43        <level value="debug" /><!-- 设置级别 -->  
44        <appender-ref ref="console" />  
45    </root>  
46    <!--   
47        设置域名限制,即 com.dchaoxiong.studentmanage.servlets   
48        包及以下的日志均输出到下面指定的通道(appender-ref)中   
49    -->  
50    <logger name="com.dchaoxiong.studentmanage.servlets">  
51        <level value="debug" /> <!-- 设置级别 -->  
52        <appender-ref ref="ROLL" /><!-- 与前面的通道id相对应 -->  
53    </logger>  
54</configuration> 
2. 把该配置文件放在工程的类路径下
3.private Logger logger = Logger.getLogger(ClassName.class);取得loger类


在log4j中定义了5个级别的日志等级:
  • ERROR - A definite problem (最少)
  • WARN - Likely a problem, but can live with it
  • INFO - Common notifications, lifecycle stuff
  • DEBUG - Low volume debug
  • TRACE - High volume debug (最多)

     

    今天解决的问题是如何不让jboss在后台打出过多的信息:

    开始还以为是自己的log4j打出来的,居然连hibernate连数据库的密码都打出来,狂汗;
    后来改了一通自己的log4j.xml,一点作用都没起,一查,原来自己的log4j都没有启用,瀑布汗;
    于是,把矛头指向jboss,搜索“log4j”,出来三个log4j.xml,其中有一个在defaul下面的应该是我用到的;
    修改一通,把org.hibernate的设置为error,噢耶,小功告成。

    总结一下:
    1.jboss里面默认带了log4j的
    2.据说,如果项目中也启用log4j,可能会和jboss的冲突;
    3.jboss中的log4j也不知道是哪个版本的,我们平常使用的<logger>元素在那里是要用<category>的;
    4.想把项目的log输出到file,而其他的都依然console&file,还没成功,ps:只是现在还没成功,最终应该是没有问题的。

    最后,Aramil提供了一个文档,也许能解决更多疑惑:JBossLog4j.zip

  • posted @ 2008-12-22 18:28 巴西木 阅读(1229) | 评论 (0)编辑 收藏

    仅列出标题
    共33页: First 4 5 6 7 8 9 10 11 12 Last