matlab写的gui程序,编译成exe,在mcr环境使用,发现多次打开程序后,打开

matlab写的gui程序,编译成exe,在mcr环境使用,发现多次打开程序后,打开,第1张

我也是最近才搞定的这个问题,按下述步骤进行,就没有问题,我已经运行成功,但是遇到你程序的bug的话,便会出现错误,关闭整个程序 希望这些对你有用 如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序

多数的GUI界面都是需要选择并显示出来的。这里讲讲如何在GUI界面中打开。

举个例子,a=imread('C:\Users\acer\Desktop\1jpg'),这个语句的意思就是读取'C:\Users\acer\Desktop\'这个路径下的文件名为'1'的jpg类型的图像给变量a。此时,我们再配合imshow(a),就可以将1jpg显示出来了。

但是,GUI界面是个用户交互的界面,如果程序固定死了就是读取某个路径的某张照片,那么用户就失去了选择权,这个GUI界面就不是个体验良好的交互平台。因此,通常情况下应该用到uigetfile文件打开对话框。GUI界面中的正确打开方式,应该是uigetfile+imread+imshow。

话不多说,直接上截图。

图中已经给出了大概的注释。要注意的是,在uigetfile函数中,{'jpg';'bmp';''}是限定选择的文件的文件类型,可以根据自己的需要进行添加和修改类型,''是所有类型文件的意思。'选择'则是这个文件打开对话框的名称。我这边运行一下程序,文件打开对话框的截图如下:

从截图中可以看出,该文件打开对话框的名称为“选择”。若点击“打开”按钮,则会将‘D:\学习\MATLAB GUI\’赋值给pn,将'假笑男孩1jpg'赋值给fn。若点击“取消”按钮,则会在电脑屏幕上d出错误提示框:“您未选择”。

特别需要强调的是,GUIDE和app designer在图像显示这部分存在着一些区别。在GUIDE中,所有的画图指令(包括imshow,plot,surf,mesh,histogram,spectrogram等等)所画的图都可以显示到坐标区中,只需要在画图指令前加一句axes(handlesaxesi)指定坐标区即可,其中,axesi是要显示的坐标区的名称。而在app designer中,目前并不能完全支持所有的画图指令,比如spectrogram,ezplot等等。并且是在画图命令里面指定坐标区,比如imshow(pic,'parent',appUIAxesi)。但是随着版本的不断更新,相信app designer会越来越完善。

纯C的很少,windows32

sdk和linux的gtk是为数不多的2个库。

现代基本没有用C开发gui的,C++是更好的选择,像qt

mfc比win32好用得多。

开发效率更高的是python,tkinter

wxwidget

pyqt都很方便

被隐藏起来了。

1、运行eclipse时关闭窗口后,程序没有结束总是运行GUI运用程序,是因为被隐藏起来了这和java的特点有关。

2、可以将其用作应用程序启动器,重新打开Eclipse,打开项目中GUI运用程序,解除隐藏就可以了。

/ AWT Sample application "记事本应用程序java源代码"

@author Amiry

@version 100 07/05/25

/

import javaawt; //导入抽象窗口工具集包(abstract window toolkit)

import javaawtevent; //导入窗口事件工具包

import javaio; //导入输入输出工具包

import javaawtdatatransfer; //导入数据转化工具包

//菜单工具条类(添加菜单项,子菜单)

class MyMenuBar extends MenuBar{ //MyMenuBar类继承MenuBar类(类方法)

public MyMenuBar(Frame parent){ //构造函数

parentsetMenuBar(this); //向parent添加自身

}

public void addMenus(String[] menus){ //菜单条下添加菜单项

for(int i=0;i<menuslength;i++)

add(new Menu(menus[i]));

}

public void addMenuItems(int menuNumber,String[] items){ //菜单添加(类方法)

for(int i=0;i<itemslength;i++){ //循环0~menuslength-1次

if(items[i]!=null) //向各个菜单项添加子菜单

getMenu(menuNumber)add(new MenuItem(items[i]));

else getMenu(menuNumber)addSeparator();

}

}

public void addActionListener(ActionListener a1){//注册所有动作监听对象(类方法)

for(int i=0;i<getMenuCount();i++) //循环到菜第i个菜单数

for(int j=0;j<getMenu(i)getItemCount();j++) //向第i个菜单的第j个子菜单注册动作事件监听

getMenu(i)getItem(j)addActionListener(a1);

}

}

//文件管理类(处理文件的打开,保存等,拥有文件对话框成员)

class MyFile{ //MyFile类定义

private FileDialog fDlg; //声明一个文件对话框(类成员)

public MyFile(Frame parent){ //构造函数(类方法)

fDlg=new FileDialog(parent,"",FileDialogLOAD);//初始化文件对话框

}

private String getPath(){ //(类方法)

return fDlggetDirectory()+"\\"+fDlggetFile(); //返回选中文件的路径

}

public String getData() throws IOException{

fDlgsetTitle("打开"); //设定文件对话框的标题为"打开"

fDlgsetMode(FileDialogLOAD); //将文件对话框的模式设定为打开模式

fDlgsetVisible(true); //显示文件对话框

//读取文件对话框选中的文件的内容并将其返回

BufferedReader br=new BufferedReader(new FileReader(getPath()));

StringBuffer sb=new StringBuffer();

String aline;

while((aline=brreadLine())!=null)

sbappend(aline+'\n');

brclose();

return sbtoString();

}

public void setData(String data) throws IOException{

//显示保存模式对话框,并将数据data存入选中的文件中

fDlgsetTitle("保存");

fDlgsetMode(FileDialogLOAD);

fDlgsetVisible(true);

BufferedWriter bw=new BufferedWriter(new FileWriter(getPath()));

bwwrite(data);

bwclose();

}

}

//文本管理类(提供记事本的剪贴,复制,粘贴等功能)

class MyClipboard{ //获取系统剪贴板

private Clipboard cb; //声明剪贴板对象

public MyClipboard(){ //构造函数,获取系统剪贴板

cb=ToolkitgetDefaultToolkit()getSystemClipboard();

}

public void setData(String data){ //将字符串存入剪贴板

cbsetContents(new StringSelection(data),null);

}

public String getData(){ //从剪贴板读取数据,并将其返回

Transferable content=cbgetContents(null);

try{

return (String)contentgetTransferData(DataFlavorstringFlavor);

}catch(Exception ue){}

return null;

}

}

//查找替换类(用于查找TextArea中特定字符串功能,并替换特定字符串

class MyFindDialog extends Dialog implements ActionListener{

private Label lFind=new Label("查找字符串");

private Label lReplace=new Label("替换字符串");

private TextField tFind=new TextField(10); //接受待查字符串TextField

private TextField tReplace=new TextField(10); //接受要替换字符串TextField

private Button bFind=new Button("查找"); //创建查找按钮

private Button bReplace=new Button("替换"); //替换按钮

private TextArea ta; //ta为含有待查字符串的TextField

public MyFindDialog(Frame owner,TextArea ta){ //构造函数

super(owner,"查找",false); //非模式对话框

thista=ta;

setLayout(null); //将Layout设为null

//设定组件的位置大小(横坐标,纵坐标,高,宽)

lFindsetBounds(10,30,80,20);

lReplacesetBounds(10,70,80,20);

tFindsetBounds(90,30,90,20);

tReplacesetBounds(90,70,90,20);

bFindsetBounds(190,30,80,20);

bReplacesetBounds(190,70,80,20);

add(lFind); //添加各个组件

add(tFind);

add(bFind);

add(lReplace);

add(tReplace);

add(bReplace);

setResizable(false); //禁止用户更改对话框大小

bFindaddActionListener(this); //为bFind添加监听对象

addWindowListener(new WindowAdapter(){ //为对话框注册关闭窗口事件监听器

public void windowClosing(WindowEvent e){

MyFindDialogthisdispose();

}

});

}

public void showFind(){

setTitle("查找"); //将对话框标题设为"查找"

setSize(280,60); //将对话框设定为合适大小

setVisible(true);

}

public void showReplace(){

setTitle("查找替换"); //标题:"查找替换"

setSize(280,110); //设定大小

setVisible(true);

}

private void find(){ //查询方法

String text=tagetText(); //从ta中获取字符串,并存入text中

String str=tFindgetText(); //获取tFind字符串,并存入text中

int end=textlength(); //获取ta字符串的长度

int len=strlength(); //获取tFind字符串的长度

int start=tagetSelectionEnd(); //从关标位置开始查找字符串

if(start==end)start=0; //若关标位于末尾,则从头开始查找

for(;start<=end-len;start++){

if(textsubstring(start,start+len)equals(str)){//若找到查找字符串

tasetSelectionStart(start); //选中并显示字符串

tasetSelectionEnd(start+len);

return; //退出方法

}

}

tasetSelectionStart(end); //若找不到待查字符串,则将光标置于末尾

tasetSelectionEnd(end);

}

private void replace(){ //替换方法

String str=tReplacegetText(); //获取待查字符串

if(tagetSelectedText()equals(tFindgetText())) //若相同则替换

tareplaceRange(str,tagetSelectionStart(),tagetSelectionEnd()); //若不同则继续查找

else find();

}

public void actionPerformed(ActionEvent e){

if(egetSource()==bFind) //按下"查找"按钮,调用find()方法

find();

else if(egetSource()==bReplace) //按下"替换"按钮,调用replace()方法

replace();

}

}

public class MyMemo extends Frame implements ActionListener{

private TextArea editor=new TextArea(); //创建文本编辑区

private MyFile mf=new MyFile(this); //创建文件

private MyClipboard cb=new MyClipboard(); //创建剪贴板

private MyFindDialog findDlg=new MyFindDialog(this,editor);//创建查找对话框

public MyMemo(String title){

//构造函数,调用父类的构造函数设定标题

super(title);

//创建菜单条

MyMenuBar mb=new MyMenuBar(this);

//向菜单条中菜单添加文件,编辑,查找,帮助4个菜单项

mbaddMenus(new String[]{"文件","编辑","查找","帮助"});

//向每个菜单添项加子菜单

mbaddMenuItems(0,new String[]{"新建","打开","保存","null","退出" });

mbaddMenuItems(1,new String[]{"剪贴","复制","粘贴","清除","null","全选" });

mbaddMenuItems(2,new String[]{"查找","null","查找替换"});

mbaddMenuItems(3,new String[]{"我的记事本信息"});

add(editor);

mbaddActionListener(this);

addWindowListener(new WindowAdapter(){ //关闭"记事本"代码

public void windowClosing(WindowEvent e){

MyMemothisdispose();

}

});

}

public void actionPerformed(ActionEvent e){ //事件执行方法

String selected=egetActionCommand(); //获取命令

if(selectedequals("新建")) //执行"新建"命令

editorsetText("");

else if(selectedequals("打开")){ //执行"打开"命令

try{ //可能出现异常

editorsetText(mfgetData());

}catch(IOException ie){}

}else if(selectedequals("保存")){ //执行"保存"命令

try{ //可能出现异常

mfsetData(editorgetText());

}catch(IOException ie){}

}else if(selectedequals("退出")){ //执行"退出"命令

dispose();

}

else if(selectedequals("剪贴")){ //执行"剪贴"命令

cbsetData(editorgetSelectedText());

editorreplaceRange("",editorgetSelectionStart(),editorgetSelectionEnd());

}

else if(selectedequals("复制")){ //执行"复制"命令

cbsetData(editorgetSelectedText());

}

else if(selectedequals("粘贴")){ //执行"粘贴"命令

String str=cbgetData();

editorreplaceRange(str,editorgetSelectionStart(),editorgetSelectionEnd());

}

else if(selectedequals("清除")){ //执行"清除"命令

editorreplaceRange("",editorgetSelectionStart(),editorgetSelectionEnd());

}

else if(selectedequals("全选")){ //执行"全选"命令

editorsetSelectionStart(0);

editorsetSelectionEnd(editorgetText()length());

}

else if(selectedequals("查找")){ //执行"查找"命令

findDlgshowReplace();

}

else if(selectedequals("查找替换")){ //执行"查找替换"命令

findDlgshowReplace();

}

}

public static void main(String[] args) { //主函数体

MyMemo memo=new MyMemo("我的记事本"); //创建我的记事本

memosetSize(300,300); //大小宽300,高300

memosetVisible(true); //显示窗口

}

}

以上就是关于matlab写的gui程序,编译成exe,在mcr环境使用,发现多次打开程序后,打开全部的内容,包括:matlab写的gui程序,编译成exe,在mcr环境使用,发现多次打开程序后,打开、matlab GUI-如何在GUI界面中打开图片、C语言如何开发桌面GUI应用程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10132965.html

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

发表评论

登录后才能评论

评论列表(0条)

保存