`
jarip
  • 浏览: 3096 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用swt模拟eclipse控制台显示打印信息

阅读更多

      在这里实现了一个能模拟eclipse控制台显示打印信息的程序. 主要的技术点有下:

 

      1, 输出流重定向:

      将形如System.out.println();的输出内容重定向的原理:

 

     (1) System类的静态属性 out 的类型是 PrintStream; System.out.println即是调用PrintStream实例的println方法;

 

     (2) PrintStream 为其他输出流添加了功能,使它们能够方便地打印(列如打印到java控制台)各种数据值表示形式;

 

     (3) 我们可以自己书写 PrintStream 的子类, 将 子类PrintStream实例 作为参数传入System.setOut(PrintStream out) 方法中;

 

     (4) 这样,通过System.out调用打印方法输出到java控制台的内容将由自己定义的子类PrintStream进行处理;

 

     (5) 本例中是把输出流重定向到SWT的Text部件里面;如果仅是想把输出流重定向到文件,则可以这样:

 

            创建文件输出流: PrintStream out = new PrintStream("./txtFileName.txt");
            设置使用新的输出流: System.setOut(out);

 

      2, 在非UI线程(主线程) 访问UI的方式

      在非UI线程访问UI, 可以使用Display.getDefault().syncExec操作UI控件

 

 

 

     下面是程序运行中的界面:

 

 

      下面是程序代码 (为了节省篇幅, 去掉了import语句, 在eclipse中可用快捷键 ctrl + shift + o 导入org.eclipse.swt和javaIO相关的包):

public class MenuTest {

	public static void main(String[] args) {

		Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setText("Console");
		shell.setBounds(100, 100, 500, 400);
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 1;
		shell.setLayout(gridLayout);

		//定义一个菜单,当点击File的Select Me Now选项时触发子线程中的循环打印
		Menu menuBar = new Menu(shell, SWT.BAR);
		shell.setMenuBar(menuBar);

		MenuItem fileMenuItems = new MenuItem(menuBar, SWT.CASCADE);
		fileMenuItems.setText("&File");
		Menu subMenu = new Menu(shell, SWT.DROP_DOWN);
		fileMenuItems.setMenu(subMenu);
		MenuItem selectItem = new MenuItem(subMenu, SWT.NULL);
		selectItem.setText("&Select Me Now");
		selectItem.setAccelerator(SWT.CTRL + 'S');
		selectItem.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent event) {
				// 默认情况下监听事件时在主线程里执行
				// 在子线程执行任务避免阻塞主线程
				PrintThread printThread = new PrintThread("the First Item");
				printThread.start();
			}
		});
		MenuItem sep = new MenuItem(subMenu, SWT.SEPARATOR);
		MenuItem exitItem = new MenuItem(subMenu, SWT.NULL);
		exitItem.setText("&Exit");

		exitItem.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent event) {
				shell.dispose();
			}
		});

		Text text = new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.WRAP);
		text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
				| GridData.FILL_VERTICAL));

                //输出重定向设置
		MyPrintStream mps = new MyPrintStream(System.out, text);
		System.setOut(mps);
		System.setErr(mps);

		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
		System.exit(0); // 杀掉子线程,终止jvm
	}

}

//定义一个PrintStream子类,将打印语句输出流重定向到Text组件中显示
class MyPrintStream extends PrintStream {

	private Text text;

	public MyPrintStream(OutputStream out, Text text) {
		super(out);
		this.text = text;
	}
	// 重写父类write方法,这个方法是所有打印方法里面都要调用的方法
	public void write(byte[] buf, int off, int len) {
		final String message = new String(buf, off, len);

		// SWT非界面线程访问组件的方式
		Display.getDefault().syncExec(new Thread() {
			public void run() {
				// 把信息添加到组件中
				if (text != null && !text.isDisposed()) {
					text.append(message);
				}
			}
		});
	}

}

//在非UI线程中不断执行System.out.println()方法
class PrintThread extends Thread {
	private String name;

	public PrintThread(String name) {
		this.name = name;
	}
	public void run() {
		while (true) {
			System.out.println(name + "was selected!");
		}
	}
}
  • 大小: 26.1 KB
分享到:
评论

相关推荐

    一款Eclipse的SWT插件

    WBPro_v7.2.0_for_Eclipse3.5就是一个专为Eclipse设计的SWT插件,旨在提升开发者的用户体验,特别是对于那些使用SWT进行GUI开发的开发者来说,它提供了可视化的界面编辑功能。 这个插件的版本号是7.2.0,说明它经过...

    SWT.rar_SWT_eclipse swt

    描述中提到“eclipse使用SWT编程最基础的一些代码什么的”,意味着这个压缩包可能包含了一些基础的SWT代码片段,供初学者学习如何在Eclipse环境中使用SWT来构建GUI应用程序。这些代码通常会涵盖如何创建窗口、按钮、...

    Eclipse下使用swt

    ### Eclipse 下使用 SWT 的知识点详解 #### 一、概述 Eclipse 是一款广泛使用的开源集成开发环境(IDE),尤其在 Java 开发领域占有重要地位。随着 Eclipse Visual Editor Project (VEP) 的出现,Eclipse 不仅能...

    使用Eclipse进行SWT编程

    【使用Eclipse进行SWT编程】 SWT,全称Standard Widget Toolkit,是由IBM开发的一套跨平台的图形用户界面(GUI)开发框架。这个框架的诞生源于Java早期GUI框架的局限性。当时,Sun Microsystems已经推出了AWT...

    Eclipse中使用SWT进行界面设计

    在Eclipse中使用SWT进行界面设计涉及到一系列关键概念和技术,包括SWT的起源与优势、SWT应用程序的组成以及开发环境的配置。 1. 为什么要使用SWT? SWT,全称Standard Widget Toolkit,是由IBM开发的一个跨平台的...

    SWT for Eclipse 3.2.zip

    5. 更新站点信息:可能包含一个更新站点配置文件,使得用户可以通过Eclipse的内置更新管理器方便地安装和升级SWT。 为了在Eclipse 3.2中使用SWT,开发者需要将这些库文件添加到项目的类路径中,或者将SWT作为依赖项...

    swt design for eclipse 3.2

    4. **JFace与RCP**:在Eclipse 3.2中,SWT通常与JFace一起使用,JFace是建立在SWT之上的更高层次的API,它提供了一些抽象类和接口,简化了UI开发。同时,Eclipse Rich Client Platform (RCP) 是基于SWT和JFace构建...

    eclipse swt 2

    eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse swt eclipse ...

    org.eclipse.swt.win32

    org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt....

    eclipse4.5 SWT 插件

    SWT插件则是Eclipse中的一个关键组件,允许开发者在Eclipse环境中使用SWT来构建用户界面。 SWT 插件在 Eclipse 4.5 中的作用: 1. **增强的GUI设计**:SWT提供了丰富的控件集合,如按钮、文本框、列表、树视图等,...

    eclipse RCP学习项目源码&扩展控制台插件for eclipse3.5

    开发者可能希望创建这样的插件来实现特定的日志输出、调试信息显示或其他与控制台交互的需求。通过这个项目的源码,我们可以学习到如何编写扩展控制台的代码,包括监听控制台事件、自定义输出格式以及添加交互式功能...

    SWT Designer 对应eclipse3.7版本插件

    压缩包子文件的文件名称"eclipse3.7的swt安装.txt"暗示了这可能是一个安装指南或者步骤说明,里面包含了如何在Eclipse 3.7中正确安装和配置SWT Designer的详细信息。通常,这样的文本文件会包含如下内容: 1. 下载...

    Eclipse SWT 开发参考

    - **org.eclipse.swt**: 这是核心包,包含了SWT的核心类和接口。 - **org.eclipse.swt.widgets**: 包含了各种UI组件类。 - **org.eclipse.swt.layout**: 提供了多种布局管理器。 - **org.eclipse.swt.graphics**: ...

    使用 SWT 写图形化界面的例子(eclipse)

    在Eclipse中,你可以使用JFace库来进一步增强SWT的功能,JFace提供了一些高级组件和数据绑定功能,简化了界面开发。不过,本例主要关注基础的SWT使用。 开始编写SWT程序,你需要导入必要的库: ```java import org...

    java eclipse swt教程

    Java Eclipse SWT教程是Java开发中的一个重要领域,主要涉及如何在Eclipse环境中使用SWT(Standard Widget Toolkit)来创建丰富的桌面应用程序界面。SWT是Eclipse基金会推出的一种GUI库,它为Java开发者提供了一种与...

    org.eclipse.swt包

    `org.eclipse.swt` 包是Java编程环境中用于创建图形用户界面(GUI)的一个重要库,它是Eclipse项目的一部分。SWT(Standard Widget Toolkit)是一个开源的GUI库,它提供了丰富的控件和功能,使得开发者可以构建高效...

    Eclipse之SWT编程

    ### Eclipse之SWT编程:深度解析与应用 #### 一、SWT的诞生与优势 SWT(Standard Widget Toolkit)是IBM为解决Java GUI开发中的一些固有问题而设计的一套跨平台图形用户界面开发框架。在Java GUI的历史进程中,Sun...

    org.eclipse.wb.swt.SWTResourcemanager类找不到使用不了

    SWT(Standard Widget Toolkit)是Eclipse使用的GUI库,而`org.eclipse.wb.swt.SWTResourceManager`是Eclipse Workbench提供的一个工具类,用于方便地管理 SWT 组件的资源,如字体、颜色、图像等。在Eclipse项目中,...

    Eclipse SWT 3.106 arm 版 适配 uos 飞腾等国产操作系统

    Eclipse SWT(Standard Widget Toolkit)是Eclipse IDE中用于创建图形用户界面(GUI)的开源库,它提供了与操作系统直接交互的能力,使得开发者可以构建原生、高性能的应用程序。在这个特定的场景中,我们讨论的是...

    Eclipse SWT 4.4 API 文档

    在Eclipse 4.4版本中,SWT API文档为开发者提供了全面的参考信息,帮助他们理解和利用这个强大的工具包来创建功能丰富的用户界面。 SWT API文档包含了关于各种组件、布局管理器、事件处理、绘图和系统服务的详细...

Global site tag (gtag.js) - Google Analytics