2006年07月11日

首先声明:我是一个男人,长得还算清秀(其实是瘦),
但我不是GAY,骨子里还有点大男子主义。

前不久的一个周末,乘大桥六线公车
车内十分拥挤,我不得不贴在一只大箱子前面,大箱子被一只纤细的手扶着.
我循着手臂看去,座位上的是一个小帅哥,和我一样清秀,但是比我更年轻,
我尽量收紧身子,以免挤倒它的箱子

站定后, 我又不经意瞟了他一眼,发现小帅哥好像有点暧昧地看着我
他然后嘴角慢慢裂开,那略带的笑意,甚至包含着讥讽。
那种表情,让我感觉十分厌恶。

突然,他扬了一下脖子, 扬起的弧线还滑过他的箱子,直指我来
我感到这个动作是一种明显的挑衅,或者还与那只被我稍稍挤斜了的箱子有关

我有点怒不可遏,但是强压怒火,回应到:
"怎么,挤到你箱子拉?" 口气中带着明显的鄙视,打心眼里,我鄙视这种小气、温软软的小男生.
为了表示我的大度,说着话,还顺势扶了一下他那略有倾斜的箱子.

车里人很多,声音很嘈杂. 小帅哥没有回答我,只是摇了摇头。

“神经病”,我心里暗暗骂到; 或许他是个哑巴,我胡乱地猜测着.再或许,他是个…..
这些想法让我一下觉得恶心得有点难以忍受,但车里实在拥挤,我只能站在原地,巴望着赶快到站

因为这极端的厌恶,时间似乎被拉长了,好像过了好久,车才上了大桥,我的腰突然被捅了两下.
我下意识地弓了一下身子,"是小偷? 还是…  我脑子里迅速地转动着.
朝着被捅的方向看过,原来是那个小帅哥纤细的手指

这时,我已经准备好了全身力气,准备挥起拳头揍他,
就在这一刹那,他拿出手机,依然笑盈盈地不说一句话, 指着屏幕让示意我看一下

我凑过脑袋,当我看到那四个大字时,差点没哭出来:

"拉 链 没 拉"

……

2005年10月01日


今天我下厨:

新增菜肴:芦蒿炒肉,不肥不瘦

这道菜叫青椒滑蟹菇,辣椒看起来有点蔫巴,火候稍稍有过,主要是酱油加的有点多,见笑了

油闷大虾

最近弄了一台HP Pavilion dv1000,对本本的看法于是有了诸多改变。
HP Pavilion dv1000基于sonama平台(1.86G cpu/915芯片组/集成显卡),用了一周下来,完全改变了过去对集成显卡的过分偏见。
作为一名Java fans,所谓速度要求往往是指运行IBM WSAD之类的软件速度。结果证明,毫不输于我的hp nc6000。
所以我的看法是:如果不玩游戏,所谓的慢往往可以通过增加内存解决,相信给他增加到1G内存,这款机器性能完全可以作为Java软件工程师专用机。

因为这款机器定位是HP家用机,所以设计为绚丽宽屏,还配备了DVD遥控器,机器造型和做工都很考究,相比之下,我的盗版NC6000就显得太粗糙了

另外,关于宽屏,看久了,那方方正正的机器就不愿再碰:) 我不能同的是:为什么几乎所有厂家的宽屏都设计为绚丽屏。说白了,绚丽屏就是在屏幕内夹层玻璃,乍看起来晶晶亮亮。可看久了,就会觉得刺眼,机器关掉后都可以当镜子照。偏偏有人喜欢这般盛气凌人的屏幕,可谓仁者见仁,智者见智吧

好了,大家欣赏一下吧,猜猜背景DVD画面是什么电影?
A.  风语者
B. 黑鹰计划
C. 深入敌后
D. 决战中的较量

外表是银白色的

2005年09月16日


我的新本本:港货,省了1000多的关税,还保证HP的品质阿:)
 COMPAQ NC6000
9760¥
 
简介:
簿而轻巧的笔记簿型计算机,拥有最新流动计算机系统功能,迎合专业人士需要
商品配置:
处理器 Intel® Pentium® M 处理器 735(1.7GHz)
二级快取内存 2048KB
内存(标准/最大) 512M(单根)
硬盘驱动器 60GB(5400rpm)
磁盘驱动器
光盘驱动器 DVD/CDRW
显示屏 14.1吋 TFT(1,024×768)
显示控制芯片 带有32MB DDR独立显存的ATI Mobility Radeon 9600显卡,硬件支持Directx9.0
音效系统 HP Premier Sound™ 提供增强立体声音效;整合式 16-bit立体声音效,可兼容 Sound Blaster Pro
调制解调器 56K(V.92)调制解调器
网卡 集成10/100/1000M网卡 HP WLAN 802.11a/b/g
键盘和输入设备 全尺寸标准键盘 指点杆和触摸板双输入设备
PCMCIA卡插槽 (2)Type II或(1)Type III PC Card接口
扩展接口 串口 并口 2个USB 2.0 VGA输出,S-video 输出 SD读卡器
预装操作系统 WindowsXP Pro英文专业版(提供中文语言包) 带COA
电池类型 锂离子电池,约5小时使用时间(视实际使用情况而有所不同)
外观尺寸 3.41厘米(高)x31.76厘米(宽)x26.2厘米(深)
标准重量 2.46公斤
保修 公司1年保修,按出厂日期起算全球联保3年,电池1年

我的DC拍的照:


2005年09月01日

今天上午,一个朋友刚刚下载了《世界之战》,向我显卑,如获至宝的样子。实际上一个月前我就看过了,觉得很不好看。倒是让我想起上个周末,中央六台电影频道播出的《生命的证据》,这部电影2001年我就看过,英文原名叫:《proof of life》。其富有浓厚浪漫气息再一次把我打动….

影片名称: 生命的证据 


出品:华纳兄弟公司
导演:Taylor Hackford
主演:Russell Crowe, Meg Ryan

影片简介:
一个在某拉丁美洲国家任职的美国人–工程师彼得-鲍曼(戴维-莫尔斯饰)被当地的一支反政府武装强行绑架了。当叛军们得知了他的真实身份后,认定这个该死的美国人一定是一个很有价值的人质,于是便开口索要六百万美元的赎金来换取他的自由。然而,工程师并不是一个走运的人质,由于他的美国老板经营情况不佳,公司正处在破产的边缘,他根本无力向绑架者提供这笔昂贵的赎金。

  在万般无奈之际,彼得的妻子爱丽丝(梅格-瑞恩饰)这位“弱女子”不得不走上前台亲自出面为她那倒霉的丈夫四处奔走。她求助于一位专门从事人质危机谈判的专家特里-索恩(拉塞尔-克罗饰)。特里在他得力属下迪诺(戴维-卡鲁索饰)以及三位受过专门训练的雇佣军的全力帮助下,决定采取大胆的举措,营救彼得。

  就在这个援救计划的实施过程中特里与爱丽丝之间萌发爱意,这使这个美人救夫的故事开始变得更加错综复杂了……
  本片的演员阵容有好莱坞著名影星梅格-瑞恩(曾主演《网络情缘》、《西雅图未眠夜》等)以及拉塞尔-克罗(曾主演《角斗士》和《知情者》)和戴维-莫尔斯(主演《绿里》)、戴维-卡鲁索及帕梅拉-里德等。


2005年07月11日
  •      Java 站点
2005年06月30日

再一次从座位上站起,已经是凌晨两点。

记不得这是第几次连续七个小时坐在电脑前了,这次是为准备Hibernate迅速入门讲义、工具、虚拟工程而坐。

此时肚子空得让我有点头眩晕,但是离开前还是忍不住要欣赏刚刚写过的东西,惊觉自己的文字竟仍然如此幼稚,心里生出无限失落。

漫漫长夜过后,常有不知今昔何年之感。已经麻木了很久,而且麻木地继续着,继续着那根本看不到期望的人生记录。

讲义. ppt   工程下载

2005年06月13日

还需要胖客户端应用吗

C/S和B/S是当今世界开发模式技术架构的两大主流技术。 C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势, 将任务合理分配到Client端和Server端来实现,让Client专注实现表示层构建,Server端专注商业逻辑和事务控制,降低了系统的通讯开销,从而平衡了整个系统的运行效率。 B是Browser结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下, 用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现, 形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。 和B/S相比,我们称C/S的客户端为胖客户端应用。

显然,两大阵营的仅仅在客户端技术存在差别,而且各有优势,尤其对于大量的、复杂的用户交互界面,B/S显得力不从心,因此我们仍然需要胖客户端的应用。


Java胖客户端技术

当前构建C/S结构的软件技术市场大量地主要被VB/Delphi所占据。
对于Java程序员,为了构建此类系统,我们几乎只能使用AWT/SWING来构建。
AWT/SWING是Java语言缺省的图形界面开发包,无论速度和外观,它们都难以让人接受。 加之相关的可视化工具明显滞后,一直以来有着极其狼狈的名声。

SWT是和AWT/SWING等同的图形界面开发包。最初是Eclipse组织为了开发Eclipse集成开发环境所编写的一组底层图形界面API。 或许是无心插柳,或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING,并可以独立使用。

基于Eclipse的SWT可视化开发工具也丰富多彩,最著名当属商业工具SWT Designer.

基于Eclipse + SWT Designer + Kopo,我们现在就可以实施Java桌面应用.


环境安装配置


Eclipse 3.0.1 安装

Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。最新的Eclipse 3.0不但界面作了很大的增强,而且增加了代码折叠等众多优秀功能,速度也有明显的提升。在安装Eclipse之前首先要安装JDK,推荐JDK1.4版本以上,如果安装JDK请参阅其他文章。从Eclipse的官方站点http://www.eclipse.org上下载Eclipse3.0.1 for Windows版,下载后将它们解压到同一个目录,勿需安装,直接找到目录下的eclipse.exe运行即可看到


SWT Designer安装配置

从官方站点http://www.swt-designer.com上下载SWT Designer v4.0.0,下载后解压到Eclipse解压目录的Plugins子目录, 然后重新启动Eclipse,选择新建SWT应用程序,如果出现下面的界面,说明安装已经成功:



还有一个重要的设置。打开Eclipse的Window-Preference->Desginer-Code Generations菜单,进入如下界面:



注意红色标框处,将可视化构建的窗口内的每个控件,使其默认为View类的属性,这点非常重要, 稍后,Controller类和Model为了存取View类中的图形控件,我们需要将相应控件定义的存取范围手动调整为public。


MVC简介

MVC是三个单词的缩写,这三个单词分别为:模型(Model)、视图(View)和控制(Controller)。 MVC模式的目的就是实现系统表示层开发的职能分工。

  • Model层实现系统中的业务逻辑。
  • View层用于与用户的交互,对于桌面应用程序,通常用Swing或SWT来实现。
  • Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示, 同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

一个虚拟案例——用户登录(UserLogon)

提供一个用户登录界面,用户可以输入用户名和密码,当点击登录按钮时,检查用户名和密码的合法性,如果用户名是Kopo,密码是1234,显示欢迎信息提示框,用户点击确定后,关闭该窗口。 否则提示“输入错误”信息,用户点击确定后,回到用户登录界面等待重新输入;用户可以点击取消按钮关闭窗口。


为UserLogon用例构建界面原型

界面原型用SWTDesinger构建界面原型如下:




UserLogon用例分离MVC的初步考虑

建立一个新的窗口,初步考虑建立四个类,对于UserLogon用例,我们建立的类图如下:



UserLogon窗口可能的构建过程如下:



  1. 实例化View类
  2. 实例化Controller类
  3. 实例化Model类
  4. 将Controller、Model类View类绑定以便接下来Controller类和Model可以访问View类中的图形组件。
  5. 调用Model类的initialize()方法,这是一个回调方法,我们可以在这个方法中加入与控制相关代码
  6. 调用Controller类的initialize()方法,这是一个回调方法,我们可以在这个方法中加入与模型相关代码,比如从数据库中读取有效数据,作为View类界面的初始显示
  7. 显示窗口

实际情况可能更复杂,每打开一个新的窗口,通常我们要向界面模型中传入输入参数对象,这里用UserLogonForm来包装输入对象。 所以在第4步(绑定)进行的时候,同时要实行Form与Controller和Model类的绑定。

最后,对于启动UserLogon窗口的客户端代码,期望看起来像这样:

...
// 构建即将启动窗口的输入参数。
WindowForm form = new WindowForm();
form.setUser("Test");
form.setPass("1234");
// 下面这行代码实现上图描述的窗口构建过程,返回UserLogonController接口便于我们在该窗口外控制其窗口外围行为。
UserLogonController ctrl = WindowBuilder.buildUserLogonWindow(form);
...
					


UserLogon用例的抽象化–Kopo框架


概念模型图

考虑UserLogon用例的一般化,我们为UserLogon相关类定义接口。



为模型类定义IModel接口;

为控制类定义IController接口;

在SWT中,窗口类一般继承Shell类,因此我们的视图类继承Shell,而没有专门定义IView接口。

为输入值对象定义IForm接口


实际建立的Kopo框架的类图如下:





采用Kopo框架进行开发,我们不难看出,通常我们的Controller和Model类仅仅需要覆盖Initiliaze方法,而其他方法都是做绑定使用的。 所以我们增加了两个抽象类:ModelAdapter和ControlerAdapter,分别实现IModel和IController接口。 这样,我们的Model类和Controller类仅需要继承ModelAdapter和ControlerAdapter就可以了。

IController和ControllerAdapter相应的源码如下

// IController应提供initialize方法,并提供绑定MVC的方法
package com.domax.pro.Kopo;

import org.eclipse.swt.widgets.Shell;

public interface IController {
    public void initialize();

    public IModel getModel();
	public void setModel(IModel model);

	public Shell getView();
	public void setView(Shell view);

	public IForm getForm();
	public void setForm(IForm form);
}
//ControllerAdapter仅仅使initialize方法抽象化,应由真正的窗口Controller类覆盖
package com.domax.pro.Kopo;

import org.eclipse.swt.widgets.Shell;

public abstract class ControllerAdapter implements IController {
	protected IModel _model;
	protected IForm _form;
    protected Shell _view;

    abstract public void initialize();
	public IModel getModel() {
		return this._model;
	}
	public void setModel(IModel model) {
		this._model = model;
	}
	public Shell getView() {
		return _view;
	}
	public void setView(Shell view) {
		this._view = view;
	}
	public IForm getForm() {
		return this._form;
	}
	public void setForm(IForm form) {
		this._form = form;
	}
}
					

IModel和ModelAdapter相应的源码如下

// IModel应提供initialize方法,并提供绑定MVC的方法
package com.domax.pro.Kopo;

import org.eclipse.swt.widgets.Shell;

public interface IModel {
    public void initialize();

	public Shell getView();
	public void setView(Shell view);

	public IController getController();
	public void setController(IController ctrl);

	public IForm getForm();
	public void setForm(IForm form);

}
					
//ModelAdapter仅仅使initialize方法抽象化,应由真正的窗口Model类覆盖
package com.domax.pro.Kopo;

import org.eclipse.swt.widgets.Shell;
public abstract class ModelAdapter implements IModel {
	protected IForm _form;
    protected Shell _view;
	protected IController _ctrl;

	abstract public void initialize();
	public Shell getView() {
		return _view;
	}

	public void setView(Shell view) {
		this._view = view;
	}
    public IController getController() {
        return this._ctrl;
    }
    public void setController(IController ctrl) {
        this._ctrl = ctrl;
    }

    public IForm getForm() {
		return this._form;
	}
	public void setForm(IForm form) {
		this._form = form;
	}
}
					

// IForm仅仅接口化输入值对象,实际传入对象的属性值由实际对象定义
package com.domax.pro.Kopo;

import java.io.Serializable;
public interface IForm extends Serializable {
}
					

考察前面UserLogon窗口构建过程,我们发现每个窗口的基础构建过程都是一样的,所以增加一个助手类,帮助我们构建窗口。 我们为其命名为BaseWindowBuilder。代码如下:

package com.domax.pro.base;
import org.eclipse.swt.widgets.Shell;
public class BaseWindowBuilder {
	protected static IController build(Shell view,IController ctrl,IModel model,IForm form){
		bind(ctrl,model,view,form);
		model.initialize(); // 回调Model类的iniitialize()方法,在该方法中,我们填入实际窗口需要的商业逻辑
		ctrl.initialize();  // 回调Controller类的iniitialize()方法,在该方法中,我们填入实际窗口需要的控制逻辑

		//显示窗口
		view.open();
		return ctrl;
	}
	// 绑定Controller、Model和View类
	protected static void bind(IController ctrl, IModel model, Shell view, IForm form) {
		ctrl.setForm(form);
		ctrl.setModel(model);
		ctrl.setView(view);

		model.setForm(form);
		model.setController(ctrl);
		model.setView(view);
	}

}
				

最终版的UserLogon用例

最后我们得到最终版的类图如下:



UserLogon用例相关源码如下:

// UserLogonModel用来初始化视图和编写商业逻辑
package com.domax.pro;
import com.domax.pro.Kopo.ModelAdapter;
public class UserLogonModel extends ModelAdapter {
	public void initialize() {
		UserLogonView view = (UserLogonView)this.getView();
		UserLogonForm form = (UserLogonForm)this.getForm();

		// 初始化界面的用户名和密码
		view.userText.setText(form.getUser());
		view.passText.setText(form.getPass());
	}

	// 用户登录校验
	public boolean logon(String user, String pass) {
		if(user.equals("Kopo") && pass.equals("1234")){
			return true;
		}else{
			return false;
		}

	}
}
				
//Controller类主要是初始化用例窗口的按钮监听事件
package com.domax.pro;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.MessageBox;

import com.domax.pro.Kopo.ControllerAdapter;

public class UserLogonController extends ControllerAdapter {
	private UserLogonView view;
	private UserLogonModel model;

	public void initialize() {
		model = (UserLogonModel)this.getModel();
		view = (UserLogonView)this.getView();

		// 监听"登录"按钮的事件
		view.logonBtn.addSelectionListener(new SelectionAdapter(){
			public void widgetSelected(SelectionEvent arg0) {
				// 调用Model实行校验,如果成功,打印提示框,关闭该窗口
				if(model.logon(view.userText.getText(),view.passText.getText())){
					MessageBox box = new MessageBox(view.getShell(),SWT.OK);
					box.setMessage("你已经成功登录!");
					box.open();

					view.close();
				}else{
					MessageBox box = new MessageBox(view.getShell(),SWT.OK);
					box.setMessage("用户名和密码错误,请重新输入!");
					box.open();
				}
			}
		});

		// 监听"取消"按钮的事件
		view.cancelBtn.addSelectionListener(new SelectionAdapter(){
			public void widgetSelected(SelectionEvent arg0) {
				view.close();
			}
		});
	}

}
				
//	UserLogonView是UserLogon用例的视图类,是由SWTDesigner可视化构建的,这里只列出代码片断
package com.domax.pro;
.....

public class UserLogonView extends Shell {

	public Button cancelBtn;
	public Button logonBtn;
	private Composite composite_1;
	public Text passText;
	private Button button_1;
	public Text userText; // <-- 注意上面列出的四个属性,SWTDesigner构建时默认private,我们需要手动更改为public
	private Button button;
	private Composite composite;

	public UserLogonView(Display display, int style) {
		super(display, style);
		createContents();
	}

	protected void createContents() {
		setText("用户登录界面");
		setSize(299, 128);

		composite = new Composite(this, SWT.NONE);
		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
		final GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 2;
		composite.setLayout(gridLayout);

		button = new Button(composite, SWT.NONE);
		button.setText("用户名:");

		userText = new Text(composite, SWT.BORDER);
		userText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		....
	}
	....
}
				
// UserLogon用例窗口打开时,需要传入参数,我们用UserLogonForm来包装它
package com.domax.pro;

import com.domax.pro.Kopo.IForm;

public class  UserLogonForm implements IForm {
	private String user;
	private String pass;
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}

}
				
// 对于特定的用例,模型、视图、控制是依赖固定的,所以该类作为一个工厂类,硬编码UserLogon用例的构建方法
package com.domax.pro;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;

import com.domax.pro.Kopo.BaseWindowBuilder;
import com.domax.pro.Kopo.IController;
import com.domax.pro.Kopo.IForm;

public class WindowBuilder extends BaseWindowBuilder{
	public static IController buildUserLogonWindow(IForm form){
		UserLogonView view = new UserLogonView(Display.getDefault(), SWT.SHELL_TRIM|SWT.SHIFT);
		UserLogonController ctrl = new UserLogonController ();
		UserLogonModel model = new UserLogonModel(); 

		return build(view,ctrl,model,form);
	}
}
				

客户端调用

UserLogon用例往往是由另一个窗口启动,所以,本文首先模拟的一个SWT应用程序,然后在该面板上加入一个按钮监听事件,监听代码如下:

....
button.addSelectionListener(new SelectionAdapter() {
	public void widgetSelected(SelectionEvent e)
	{
		// 构建输入值对象
		UserLogonForm form = new UserLogonForm();
		form.setUser("请在此处输入用户名...");
		form.setPass("请在此处输入密码名...");

		// 构建UserLogon用例窗口
		WindowBuilder.buildUserLogonWindow(form);
	}
});
....

总结

如果没有一个可视化开发环境,构建MVC中复杂视图的工作将不可想象,所以Kopo的成功首先得益于优秀的可视化工具:SWTDesigner。

借助SWTDesigner,视图类构建完全可视化。采用Kopo这样的MVC框架后,构建后的视图类几乎不需要手工写一行代码。

这样的开发过程首带来了几个巨大的好处:

  1. 有优秀的可视化开发环境,界面的构建将非常迅速。
  2. 视图类完全可重用
  3. 视图类重构将变得更加容易
  4. 视图类构建的简单性使得其开发不需要有太多专业知识的程序员就可胜任

实际上,SWTDesigner工具本身的优点还不止于此,首先它的效率比Eclipse官方可视化工具速度要快很多;另外,还支持可视化切换显示国际化窗口, 并且可视化构建Swing应用程序。

实际开发过程中,为了实现复杂的界面逻辑控制,MVC框架的工作的还很多,比如我们可以窗口构建后打开初始化数据库连接;在控制类中增加Validate机制等。

可喜的是,国内一些公司已经基于Kopo思想开发了自己的商业框架,并提供了强大的MDA工具,使SWT实际应用到企业级系统当中去了。


获得相关资源

本文相应的Eclipse工程可以在这里下载。解压缩后导入到Eclipse工程,然后运行WindowStarter,点击 测试按钮即可。

2005年06月12日

导演:约翰·摩尔 John Moore
主演:欧文·威尔逊 Owen Wilson
   吉恩·哈克曼 Gene Hackman
出品:20世纪福克斯影业公

  年轻上尉克里斯出发执行他复员前的最后一次任务。他和队友兼好友迈克飞越波斯尼亚上空,按惯例进行地面拍照时,不幸被击落。正在克里斯发出呼救信号时,迈克被塞族秘密军事领袖杀害了。克里斯在陌生的土地上逃亡,努力向拯救地靠近。路上,他无意中发现了被塞族屠杀的穆族人的大片墓地。他意识到自己和迈克在飞机上一定无意中拍到了这个秘密,这也是他们被击落、迈克被谋杀的真正原因。

  美军指挥官瑞格特上将希望尽一切力量拯救克里斯,但却受到北约司令官出于政治考虑的阻挠。时间一点点过去,克里斯的情况越来越危急,瑞格特决定孤注一掷。

深入敌后其实算是一部老片了,首映:2001/11/30。不过我是第一次看,那场SAM追飞机的场面我看了3遍还不过瘾,如果你没看过,快来吧,绝不匡你

2005年05月23日

主演:
布鲁诺-冈茨
(Bruno Ganz)
亚历桑德拉-玛丽亚-拉拉
(Alexandra Maria Lara)

导演:
奥利弗-西斯贝格
(Oliver Hirschbiegel)



电影背景:
在获得第77届奥斯卡奖提名的外语片中,没有一部如《帝国的毁灭》一般在全球引起那么大的争议。在这部德国影片中,以往只是作为背景人物的希特勒,首次当了一回主人公。影片把镜头对准了希特勒人生中最后的12天,再现了苏联红军攻克柏林,希特勒同新婚妻子爱娃-布劳恩自杀于地下掩体等历史事件。执导该片的是德国著名导演奥利弗-西斯贝格,希特勒的扮演者是曾出演过获奖影片《柏林苍穹下》的德国杰出演员布鲁诺-冈茨。该片在德国取得了3000万欧元的骄人票房,同时也引发了评论家的众多非议。观众普遍认为,《帝国的毁灭》对希特勒的描写过于人性化,有美化纳粹之嫌,不过也有为数不少的电影专家对这部冷静客观、以人文主义表现手法拍摄的电影盛赞有加。导演奥利弗-西斯贝格说:“我的电影非常有争议。作为电影人,我们向当年的受害者展示的不是一个魔鬼,而是一个人。我很为这部电影自豪。”该片赢得了德国顶级电影荣誉奖之一的巴伐利亚电影观众奖。……