Java标准输出重定向到GUI

Java标准输出重定向到GUI,第1张

实现输出从控制台到GUI并不复杂 只需要将标准输出重定向

重定向标准输出很easy System 类里有两个静态方法setErr(PrintStream err) 和 setOut(PrintStream out) 分别用于重定位 标准 错误输出流和 标准 输出流 只需要在程序初始时设置即可

// GUIPrintStream guiPrintStream = new GUIPrintStream(System out jTextArea);

System setErr(guiPrintStream);

System setOut(guiPrintStream);

在上面的代码中 我们发现一个新的类 GUIPrintStream 这是我们为 PrintStream 所做的包装 因为我们的输出目标位置是GUI 所以需要在 PrintStream 上做些文章 大家请看下面 GUIPrintStream 的代码

Java代码

///

To change this template choose Tools | Templates

and open the template in the editor

/

import java io OutputStream;

import java io PrintStream;

import javax swing SwingUtilities;

import javax swing text JTextComponent;

/ //

输出到文本组件的流

@author Chen Wei

@website chenwei mobi

@email chenw

/

public class GUIPrintStream extends PrintStream {

private JTextComponent ponent;

private StringBuffer = new StringBuffer();

public GUIPrintStream(OutputStream out JTextComponent ponent) {

super(out);

ponent = ponent;

}

/ //

重写write()方法 将输出信息填充到GUI组件

@param buf

@param off

@param len

/

@Override

public void write(byte[] buf int off int len) {

final String message = new String(buf off len);

SwingUtilities invokeLater(new Runnable() {

public void run() {

append(message);

ponent setText( toString());

}

});

}

}

///

To change this template choose Tools | Templates

and open the template in the editor

/

import java io OutputStream;

import java io PrintStream;

import javax swing SwingUtilities;

import javax swing text JTextComponent;

/ //

输出到文本组件的流

@author Chen Wei

@website chenwei mobi

@email chenw

/

public class GUIPrintStream extends PrintStream {

private JTextComponent ponent;

private StringBuffer = new StringBuffer();

public GUIPrintStream(OutputStream out JTextComponent ponent) {

super(out);

ponent = ponent;

}

/ //

重写write()方法 将输出信息填充到GUI组件

@param buf

@param off

@param len

/

@Override

public void write(byte[] buf int off int len) {

final String message = new String(buf off len);

SwingUtilities invokeLater(new Runnable() {

public void run() {

append(message);

ponent setText( toString());

}

});

}

}

类 GUIPrintStream 继承自 PrintStream 并且对它进行了一些修改

GUIPrintStream 在构造函数中增加了一个 JTextComponent 变量 它就是我们的目标输出 GUI 组件 它规定了目标输出组件是一个文本组件 接下来覆写了 write(byte[] buf int off int len)方法 这个方法原来的作用是将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流 现在经过我们的修改 变成了将 byte 数组包装成 String 写入目标 GUI 组件

简单的代码完成了将标准输出重定向到 GUI 的全过程 由此延伸 还可以将标准输出重定向到文本文件 从GUI获取标准输入等 就不一一介绍

测试

Java代码

public class MainFrame extends javax swing JFrame {

public MainFrame() {

initComponents();

// 重定向到通过文本组件构建的组件输出流中

System setOut(new GUIPrintStream(System out textArea));

}

private void initComponents() {

scrollPane = new javax swing JScrollPane();

textArea = new javax swing JTextArea();

btnOut = new javax swing JButton();

setDefaultCloseOperation(javax swing WindowConstants EXIT_ON_CLOSE);

setTitle( 标准输出重定向到GUI chenwei mobi );

textArea setColumns( );

textArea setRows( );

scrollPane setViewportView(textArea);

getContentPane() add(scrollPane java awt BorderLayout CENTER);

btnOut setText( System out println(System getProperties()); );

btnOut addActionListener(new java awt event ActionListener() {

public void actionPerformed(java awt event ActionEvent evt) {

btnOutActionPerformed(evt);

}

});

getContentPane() add(btnOut java awt BorderLayout PAGE_END);

pack();

}

private void btnOutActionPerformed(java awt event ActionEvent evt) {

System out println(System getProperties());

}

/

@param args the mand line arguments

/

public static void main(String args[]) {

java awt EventQueue invokeLater(new Runnable() {

public void run() {

new MainFrame() setVisible(true);

}

});

}

private javax swing JButton btnOut;

private javax swing JScrollPane scrollPane;

private javax swing JTextArea textArea;

lishixinzhi/Article/program/Java/hx/201311/25870

minggw(gcc)编译出来的动态库(DLL),默认是没有MSVC连接动态库所需要的lib文件的。

关于MSVC的DLL和LIB的作用和区别,请参考这篇博文,讲得很透彻了–>《DLL和LIB的区别》

那么如果VC要链接gcc生成的DLL,却没有lib文件怎么办?

对于这个问题网上都有解决的办法,这篇文章讲到一些办法,可供收藏《VC6 调用GCC的DLL》,对于没有提供lib的DLL都可以用这篇文章提供的办法试试。

如果项目中不同的模块用不同的编译器编译,这时如果gcc编译的DLL没有import library(lib文件),可以通过cmake设置选项来解决。

CMAKE有一个GNUtoMS参数就是解决这个问题的。

GNUtoMS

Convert GNU import library (dlla) to MS format (lib)

When linking a shared library or executable that exports symbols using GNU tools on Windows (MinGW/MSYS) with Visual Studio installed convert the import library (dlla) from GNU to MS format (lib) Both import libraries will be installed by install(TARGETS) and exported by install(EXPORT) and export() to be linked by applications with either GNU- or MS-compatible tools

CMAKE_GNUtoMS

Convert GNU import libraries (dlla) to MS format (lib)

This variable is used to initialize the GNUtoMS property on targets when they are created See that target property for additional information(这个变量用来初始化GNUtoMS属性)

在用cmake生成Makefile时,设置GNUtoMS就可以解决这个问题。有两种途径:

shell命令行方式

如下在命令行中-D定义一个为bool类型的CMAKE_GNUtoMS参数为ON,就指示在编译时对dll生成lib的import library

cmake %source_folder% -G “Eclipse CDT4 - MinGW Makefiles” -DCMAKE_GNUtoMS:BOOL=ON

cmak-gui

如下在cmake-gui界面中将CMAKE_GNUtoMS选项勾选,再点<generate>按钮生成Makefile

这里写描述

然后执行make编译项目的过程中,生成dll时会输出(前提是你安装了VC编译器)

Setting environment for using Microsoft Visual Studio 2010 x64 tools

Microsoft (R) Library Manager Version 10003031901

Copyright (C) Microsoft Corporation All rights reserved

正在创建库 libturbojpeglib 和对象 libturbojpegexp

编译完成后,你就会发现所有的dll都有对应的lib文件了。

link: >

可以设置一个回调函数,比如添加一个pushbutton控件,在该控件的callback中添加如下代码:

hchildren = allchild(gcf);

hedit = findobj(hchildren,'Style','edit');

data = get(hedit ,'String');

%%

得到的data就是所有输出,输出结果是一个cell数组

通过‘开始’>‘所有程序’>‘CMake 2’8>‘CMake’来运行CMake(CMake-GUI)(这里假定在简体中文Windows中运行28版本)

在"Where is the source code"文本框中,输入或者“browse”到源代码的根目录

在"Where to build the binaries" 文本框中,输入或者“browse”到输出文件夹。

单击屏幕下方的'Configure'按键。

选择你的目标编译平台,例如"Visual Studio 10 2010"

当系统提示是否创建构建目录的时候选择'Ok'

等待configure执行结束。

屏幕上现在会有一些配置设置,并用红色标记(这是用来指出你是第一次看到他们)。你可以在这里手动配置这些选项,不过现在我们只需要再次选择'Configure'。

等运行结束了选择"Generate"按键。

构建文件将会在你之前选择的文件夹下面产生,这时候就可以退出cmake来进行真正的编译工作。

MATLAB GUI 是一种强大的图形用户界面,可以帮助用户有效地访问和控制 MATLAB 应用程序。它可以帮助用户更容易地使用 MATLAB,并且可以让用户更容易地访问和控制 MATLAB 应用程序中的各种功能。MATLAB GUI 可以让用户创建可视化界面,以便更容易地控制和 *** 作 MATLAB 应用程序。它可以帮助用户创建图形用户界面,以便用户可以通过图形用户界面轻松地控制 MATLAB 应用程序。此外,MATLAB GUI 还可以帮助用户创建可视化工具,以便用户可以更容易地控制和 *** 作 MATLAB 应用程序。因此,MATLAB GUI 可以帮助用户更容易地控制和 *** 作 MATLAB 应用程序,从而提高用户的工作效率。

你之前编写好的负责计算m文件是脚本文件还是函数文件

如果是脚本文件的话,要想办法改成函数文件

并使其能够接受两个输入参数

根据两个输入参数计算出24个输出参数

而24个输出参数的形式是固定的8x3,所以完全可以输出一个矩阵

那么你用于计算的函数大概拥有下面的形式

输出矩阵= 函数名(输入参数1,输入参数2)

省下的你只需在gui的回调函数里,调用编写好的计算函数

将gui中根据editbox输入的连个参数传递给计算函数

得到的8x3矩阵,顺序显示到gui的输出就可以了

以上就是关于Java标准输出重定向到GUI全部的内容,包括:Java标准输出重定向到GUI、cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效、求大神们指点,使用matlab的GUI界面怎么能把数据变成字符串全部一次性输出或者简单的把数据全部直接输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9539357.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存