精华内容
下载资源
问答
  • 单例模式有哪些使用场景 在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出...

    1.单例模式定义

    单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)

    2.单例模式有哪些使用场景

    在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。

    3.Java中单例模式的好处

    • 频繁使用的对象,可以忽略创建对象花销的时间,降低系统开销
    • 系统new对象的此时减少,降低Java程序GC压力,缩短GC时间

    4.Java中单例模式的实现方式

    • 饿汉式单例类
    /**
     * @author caishen
     * @version 1.0
     * @className EagerSingleton
     * @date 2019/12/18 11:12
     * 自分で書いたコードの各行を担当する
     **/
    public class EagerSingleton {
    
        private static final EagerSingleton instance = new EagerSingleton();
    
        private EagerSingleton() { }
    
        public static EagerSingleton getInstance(){
            return instance;
        }
    }
    饿汉式单例类是存在缺点的,就是无论这个对象后面是否使用,在内存中都会存在这个对象,如果该对象分配了大量资源并且未使用,那么就会对系统性能产生影响 - 饿汉式初始化块单例类
    /**
     * @author caishen
     * @version 1.0
     * @className EagerStaticBlockSingleton
     * @date 2019/12/18 11:25
     * 自分で書いたコードの各行を担当する
     **/
    public class EagerStaticBlockSingleton {
    
        private EagerStaticBlockSingleton() { }
    
        private static final EagerStaticBlockSingleton instance;
    
        static {
            try {
                instance = new EagerStaticBlockSingleton();
            } catch (Exception e) {
                throw e;
            }
        }
    
        public static EagerStaticBlockSingleton getInstance() {
            return instance;
        }
    }
    问题点和上面一致 - 懒汉式(非线程安全)单例类
    /**
     * @author caishen
     * @version 1.0
     * @className LazySingleton
     * @date 2019/12/18 11:30
     * 自分で書いたコードの各行を担当する
     **/
    public class LazySingleton {
    
        private LazySingleton() {
        }
    
        private static LazySingleton instance;
        // 未加锁 非线程安全
        public static LazySingleton getInstance() {
            if (null == instance) {
                instance = new LazySingleton();
            }
            return instance;
        }
    }
    非线程安全,需要加上synchronized关键字 参考线程安全的实现 - 懒汉式(线程安全)单例类
    /**
     * @author caishen
     * @version 1.0
     * @className LazySingleton
     * @date 2019/12/18 11:30
     * 自分で書いたコードの各行を担当する
     * 线程安全
     **/
    public class LazySafetySingleton {
    
        private LazySafetySingleton() {
        }
    
        private static LazySafetySingleton instance;
        // 加上重量级锁synchronized关键字
        public static synchronized LazySafetySingleton getInstance() {
            if (null == instance) {
                instance = new LazySafetySingleton();
            }
            return instance;
        }
    }
    • 双重检查加锁懒汉式单例类
    /**
     * @author caishen
     * @version 1.0
     * @className LazyDoubleCheckedLockingSingleton
     * @date 2019/12/18 11:38
     * 自分で書いたコードの各行を担当する
     **/
    public class LazyDoubleCheckedLockingSingleton {
    
        private LazyDoubleCheckedLockingSingleton() {
        }
        /**
         * volatile 保证instance变量可见性
         */
        public static volatile LazyDoubleCheckedLockingSingleton instance;
    
        public static LazyDoubleCheckedLockingSingleton getInstance() {
    
            if (instance == null) {
                // 保证同时只有一个线程进入到这段代码
                synchronized (LazyDoubleCheckedLockingSingleton.class) {
                    if (instance == null) {
                        instance = new LazyDoubleCheckedLockingSingleton();
                    }
                }
            }
            return instance;
        }
    }
    第一步判断instance是否等于null,假如此时thread1和thread2同时判断都为null. 同步代码块儿能保证只有一个线程进入到下面的代码去创建一个示例,其中使用了volatile关键字,保证了instance实例在所有线程的可见性,这个关键字是十分有必要的.当thread1创建一个实例之后,thread2能够第一时间拿到实例并返回 - 静态内部类单例类(Bill Pugh singleton)
    /**
     * @author caishen
     * @version 1.0
     * @className LazyInnerClassSingleton
     * @date 2019/12/18 11:51
     * 自分で書いたコードの各行を担当する
     **/
    public class LazyInnerClassSingleton {
    
        private LazyInnerClassSingleton() {
        }
    
        private static class SingletonHelper {
            private static final LazyInnerClassSingleton INSTANCE = new LazyInnerClassSingleton();
        }
    
        public static LazyInnerClassSingleton getInstance() {
            return SingletonHelper.INSTANCE;
        }
    
    }
    第一次调用getInstance方法才会去加载静态内部类,也是线程安全的,既不会暂用资源,又可以做到按需要加载 - 枚举单例类
    /**
     * @author caishen
     * @version 1.0
     * @className EnumSingleton
     * @date 2019/12/18 11:56
     * 自分で書いたコードの各行を担当する
     **/
    public enum EnumSingleton {
        INSTANCE {
            @Override
            protected void testPrint() {
                System.out.println("instance");
            }
        };
    
        protected abstract void testPrint();
    
        private Object data;
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public static EnumSingleton getInstance() {
            return INSTANCE;
        }
    }
    枚举可以防止反射和反序列化破坏,但是使用起来不太灵活

    5.单例模式与反射

    上面讲了这么多单例类,但是除了枚举类型之外的其他类型的单例类都可以被破坏,Java反射强大到可以获取到私有属性.下面我们将示例破坏单例类
    /**
     * @author caishen
     * @version 1.0
     * @className SingletonAndReflection
     * @date 2019/12/18 12:13
     * 自分で書いたコードの各行を担当する
     **/
    public class SingletonAndReflection {
    
        public static void main(String[] args) {
            Singleton instance = Singleton.getInstance();
    
            Singleton reflectInstance = null;
            // 获取所有权限修饰符的构造函数
            Constructor<?>[] declaredConstructors = instance.getClass().getDeclaredConstructors();
    
            try {
                for (Constructor<?> declaredConstructor : declaredConstructors) {
                    declaredConstructor.setAccessible(true);
                    reflectInstance = (Singleton) declaredConstructor.newInstance();
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            System.err.println("instance hashCode:" + instance.hashCode());
            System.err.println("reflectInstance hashCode:" + reflectInstance.hashCode());
        }
    
    }
    class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    输出结果,发现单例模式被破坏
    instance hashCode:1068934215
    reflectInstance hashCode:127618319

    6.如何防止反射破坏单例

    class Singleton {
        private static final Singleton instance = new Singleton();
    
        private Singleton() {
            // 如果instance已经被实例化,直接抛出异常
            if(instance != null){
                throw new IllegalStateException("Singleton already initialized");
            }
        }
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    通过反射获取私有构造方法,如果instance已经被实例化,直接抛出异常

    7.单例模式与序列化

    /**
     * @author caishen
     * @version 1.0
     * @className SingletonAndSerialization
     * @date 2019/12/18 12:29
     * 自分で書いたコードの各行を担当する
     **/
    public class SingletonAndSerialization {
        public static void main(String[] args) {
            SerializableSingleton instance = SerializableSingleton.getInstance();
            String path = "d://a.txt";
            try {
                ObjectOutput objectOutput = new ObjectOutputStream(new FileOutputStream(path));
                objectOutput.writeObject(instance);
                objectOutput.close();
    
                ObjectInput objectInput = new ObjectInputStream(new FileInputStream(path));
                SerializableSingleton serializableSingleton = (SerializableSingleton) objectInput.readObject();
                objectInput.close();
    
                System.err.println("instance hashCode:" + instance.hashCode());
                System.err.println("serializableInstance hashCode:" + serializableSingleton.hashCode());
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    class SerializableSingleton implements Serializable {
        private static final long serialVersionUID = -1;
    
        private static SerializableSingleton instance;
    
        private SerializableSingleton() {
        }
    
        public static synchronized SerializableSingleton getInstance() {
            if (instance == null) {
                instance = new SerializableSingleton();
            }
            return instance;
        }
    }

    输出结果

    instance hashCode:913190639
    serializableInstance hashCode:1335050193

    8.如何防止序列化破坏单例

    class SerializableSingleton implements Serializable {
        private static final long serialVersionUID = -1;
    
        private static SerializableSingleton instance;
    
        private SerializableSingleton() {
        }
    
        public static synchronized SerializableSingleton getInstance() {
            if (instance == null) {
                instance = new SerializableSingleton();
            }
            return instance;
        }
    
        /**
         * 实现readResolve方法以返回现有实例
         * @return
         */
        protected Object readResolve(){
            return instance;
        }
    }
    反序列化会去执行readResolve方法,我们直接实现这个方法返回已经存在的实例,在ObjectInputStream.readObject()方法执行时,会通过卫语句desc.hasReadResolveMethod()检查类中是否存在名为readResolve()的方法,如果有,就执行desc.invokeReadResolve(obj)调用该方法。readResolve()会用自定义的反序列化逻辑覆盖默认实现,因此强制它返回instance本身,就可以防止产生新的实例。 结果输出
    instance hashCode:913190639
    serializableInstance hashCode:913190639

    9.枚举单例类为什么被称为最安全的单例类

    枚举单例对反射的防御,我们把上面SingletonAndReflection里面的单例换为枚举单例 抛出如下异常

    dc08af7f39c11deadf52551452cc4f97.png

    我们到Constructor.newInstance()方法中看到如下语句

    88f96c07467f15e33b7e2b5731c603d8.png

    可见,JDK反射机制内部完全禁止了用反射创建枚举实例的可能性。
    枚举单例对序列化的防御,我们把上面SingletonAndSerialization里面的单例换为枚举单例,返回结果

    instance hashCode:542512562
    serializableInstance hashCode:542512562
    hashCode一模一样,这是因为ObjectInputStream内部有一个专门针对枚举的readEnum方法,其流程如下
    • 通过类描述符取得枚举单例的类型EnumSingleton;
    • 取得枚举单例中的枚举值的名字(这里是INSTANCE);
    • 调用Enum.valueOf()方法,根据枚举类型和枚举值的名字,获得最终的单例.
    展开全文
  • 一、创建模态和非模态对话框除了alert(""); confirm(""); prompt("");之外还有创建模态对话框:vReturnValue = window.showModalDialog(sURL [, vFreeArgument] [, sOrnaments]); 如:window.showModalDialog(...

    一、创建模态和非模态对话框
    除了alert(""); confirm(""); prompt("");之外还有
    创建模态对话框:
    vReturnValue = window.showModalDialog(sURL [, vFreeArgument] [, sOrnaments]);
    如:window.showModalDialog("callee.htm")
    创建非模态对话框: 
    vReturnValue = window.showModelessDialog(sURL [, vFreeArgument] [, sOrnaments]);
    如:window.showModelessDialog("callee.htm")

    二、控制对话框大小和位置
    下面的代码将打开一个高200px、宽800px的对话框:

    window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px');

    以下代码,看看关闭居中属性后新窗口的位置:

    window.showModalDialog('callee.htm','','dialogHeight:200px;dialogWidth:800px;center:no');


    三、改变对话框外观
    下面的代码将去除上下文关联提示图标、不显示状态栏、窗口边缘风格为凹陷:
    showModelessDialog("callee.htm","","status:0;help:0;edge:sunken");

    四、从父页面页面传递数据到子页面


    (一)传递值类型数据
    在caller.htm页面中输入以下代码:

    <INPUT TYPE="button" VALUE="创建模态对话框" οnclick="fnOpenModal()">

    <br><br>
    <INPUT TYPE="button" VALUE="创建非模态对话框" οnclick="fnOpenModeless()">

    <script language="javascript">

    <!--
    function fnOpenModal()
    {
    window.showModalDialog("callee.htm","打开了一个新模态窗口")
    }

    function fnOpenModeless()
    {
    window.showModelessDialog("callee.htm","打开了一个新非模态窗口")
    }
    //-->

    </script>


    在callee.htm页面中输入以下代码:
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    alert(dialogArguments);
    //-->
    </SCRIPT>

    (二)传递数组引用类型数据 (同样可以为对象传值) 
    第一种值类型数据的传递中,在callee.htm页面中只能读取caller.htm页面的传递数据。
    当需要对caller.htm页面的传递内容进行修改时,就需使用到数组引用类型的传递方式。 
    首先,在caller.htm页面中输入以下代码:  
    <INPUT TYPE="button" VALUE="创建模态对话框" οnclick="fnOpenModal()"> 
    <br><br>  
    <INPUT TYPE="button" VALUE="创建非模态对话框" οnclick="fnOpenModeless()"> 
    <script language="javascript"> 
    <!--  
    var a = new Array; 
    a[0]="first";
    a[1]="second"; 
    a[2]="third"; 
    function fnOpenModal()
    {  
    window.showModalDialog("callee.htm",a) 
    }  
    function fnOpenModeless()
    {  
    window.showModelessDialog("callee.htm",a)
     }  
    // --> 
    </script>  
    然后在callee.htm页面中输入以下代码: 
    <SCRIPT LANGUAGE="JavaScript">
     <!--  
    a = dialogArguments;  //特殊关键字,表示接收的的参数对象
    alert(a);  
    a[0] = "fourth";
     // --> 
    </SCRIPT> 

    转载于:https://www.cnblogs.com/qqzy168/p/3310370.html

    展开全文
  • 方法如下 剪贴路径 执行菜单文件/打开命令或按Ctrl+o键打开素材使用钢笔工具创建路径 拖动工作路径到创建新路径按钮上得到路径1 在弹出菜单中执行剪贴路径命令打开剪贴路径对话框 设置完毕单击确定按钮再在菜单栏...
  • 录制完一个宏操作之后,我们可以在工作簿中反复调用创建的宏来执行重复的操作,那么执行宏操作有哪些方法呢?上两篇文章中,其实已经跟大家讲了两种执行宏操作的方法,不知道大家有没有印象?方法一:使用“宏”...

    录制完一个宏操作之后,我们可以在工作簿中反复调用创建的宏来执行重复的操作,那么执行宏操作有哪些方法呢?

    上两篇文章中,其实已经跟大家讲了两种执行宏操作的方法,不知道大家有没有印象?

    方法一:使用“宏”对话框执行宏。

    1、点击菜单栏的“开发工具”选项卡,在“代码”工具组中点击“”按钮。

    6d0046b940dbd1490dcd708eed4bd2b7.png

    2、弹出“”对话框,在宏列表中选中要执行宏的宏名称,点击“执行”按钮即可执行宏操作。

    4f16f3b0f37083ed0bac638b11d12186.png

    方法二:使用“快捷键”执行宏。

    在录制宏时,可以为所录制的宏指定快捷键,快捷键一般由“Ctrl + 小写字母”组成。

    点击菜单栏的“开发工具”选项卡,在“代码”工具组中点击“录制宏”按钮,弹出“录制宏”对话框,在快捷键处设置快捷键,例如“Ctrl + r”,那么就可以用指定的快捷键组合来执行宏操作。

    2b79c7cf6259622949d793acef11bfc2.png

    如果录制宏的时候没有设置快捷键,也可以在宏录制完成之后设置快捷键。

    点击菜单栏的“开发工具”选项卡,在“代码”工具组中点击“”按钮,弹出“”对话框,在宏列表中选中要设置快捷键的宏名称,点击“选项”按钮,弹出“宏选项”对话框,在快捷键处设置快捷键,点击“确定”按钮,那么就可以用设置好的快捷键组合来执行宏操作。

    cf38de6bb3c97f559ea82eb2eee4dbf0.png

    方法三:在“快速访问工具栏”中添加宏按钮执行宏。

    1、点击菜单栏的“文件”选项卡,点击“选项”,弹出“Excel选项”对话框,点击“快速访问工具栏”选项卡,“从下列位置选择命令”下拉选项中选择“”,此时可以看到我们所有录制完成的宏,在列表中选中要添加到快速访问工具栏的宏名称,点击“添加”按钮,再点击“确定”按钮。

    699765c6e0290fab2593088f73569c48.png

    2、此时我们在Excel工作界面的快速访问工具栏区就可以看到我们添加的宏按钮,点击按钮就可以执行宏操作。

    d4f535c58431b1d9455b63b3a85579c7.png

    3、如果要从快速访问工具栏中把执行宏的按钮删除,只需要选中按钮,点击鼠标右键,选择“从快速访问工具栏删除”选项即可。

    d126b141b75e49005999e64debc540d2.png

    方法四:在“工作表”中添加按钮执行宏。

    1、点击菜单栏的“开发工具”选项卡,在“控件”工具组中点击“插入”,选择“按钮(窗体控件)”,

    13dbe6a076cd3a48f885d7e68e321f83.png

    2、在工作表中单击鼠标左键(或按住鼠标左键拖动)插入一个按钮,当鼠标左键松开时会弹出“指定宏”对话框,可以给按钮起个名字,然后在列表中选择要指定的宏,点击“确定”按钮。

    2aee1c84a394e54c52b766b30a85e428.png

    3、选中按钮,点击鼠标右键,在右键菜单中选择“编辑文字”就可以给按钮重命名。

    bfcedb4d77291251f8b20e453727ed3e.png

    4、选中工作表中需要执行宏的单元格,点击按钮,就可以执行宏操作。

    c20a11801f3bdbd787e04bbb3f33ee55.png

    方法五:使用“VBE编辑器”执行宏。

    VBE编辑器会是我们以后学习VBA的重点,因为录制宏的操作虽然很简单,但并不是所有的问题都能通过录制宏来解决,很多需要我们自己写程序代码,VBE编辑器就是我们写代码的一个环境。详细用法等以后我们用到了再作详细讲解!

    df54df847af4a30035c87bdd7e3ca7fa.png

    执行宏操作,我觉得使用快捷键还是最简单最便捷的方法,你们认为呢?欢迎大家在评论区留言一起讨论哦!如果您觉得文章不错,可以点赞或转发分享给您的朋友,希望多多支持~

    本文首发公众号【Word和Excel达人先生】,如需转载请联系小编!

    展开全文
  • liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。 这个对话框使用命令行参数,以确定产生哪些类型的窗口部件。 一个部件是对话框包的窗口元素类型的术语。 每个...
    liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。
    这个对话框使用命令行参数,以确定产生哪些类型的窗口部件。
    一个部件是对话框包的窗口元素类型的术语。
    每个对话框部件提供的输出有两种形式
    一种:使用STDERR
    另一种:使用退出状态码,“OK”为0,”Cancle”和“NO”为1.
     
    dialog常见的通用选项有:
    - -backtitle  backtitle  指定backtitle字符串显示在背景下,在屏幕的顶部。
    - -begin  y  x       指定的位置在屏幕上的上一个对话框的左上角
    - -colors             解读嵌入式“/ Z”的对话框中的文本序列由下面的字符 0-7, b  B, u, U, ect,恢复正常的设置使用“/Zn”
    - -defaultno          使的是默认值 yes/no,使用no
    - -default-item string 设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
    - -insecure         输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点
    - -nocancel        设置在输入框,菜单,和复选框中,禁止选“cancel”
    - -nook           设置在输入框,菜单,和复选框中,禁止选“ok”
    - -no-shadow       禁止阴影出现在每个对话框的底部
    - -ok-label  string  覆盖使用“OK”按钮的标签
    - -timeout  secs    超时(返回的错误代码),如果用户在指定的时间内没有给出相应
    - -title  title       指定将在对话框的上方显示的标题字符串
    --clear            用来完成清屏操作
     
     
    常见的对话框控件选项有:
    类型     用于创建类型的选项            
    --calendar     提供了一个日历,让你可以选择日期
    --checklist     允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)
    --from        允许您建立一个带标签的文本字段,并要求填写
    --fselect      提供一个路径,让你选择浏览的文件
    --gauge    显示一个表,呈现出完成的百分比,就是显示出进度。
    --infobox    显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)
    --inputbox     让用户输入文本  (输入框  )
    --inputmenu    提供一个可供用户编辑的菜单  (可编辑的菜单框)
    --menu       显示一个列表供用户选择   (菜单框)
    --msgbox    显示一条消息,并要求用户选择一个确定按钮  (消息框  )
    --pause      显示一个表格用来显示一个指定的暂停期的状态
    --passwordbox   显示一个输入框,它隐藏文本
    --passwordfrom   显示一个来源于标签并且隐藏的文本字段
    --radiolist      提供一个菜单项目组,只有一个项目,可以选择  (单选框 )
    --tailbox       在一个滚动窗口文件中使用tail命令来显示文本
    --tailboxbg     tailbox类似,但是在background模式下操作
    --textbox     在带有滚动条的文本框中显示文件的内容  (文本框)
    --timebox    提供一个窗口,选择小时,分钟,秒
    --yesno      提供一个带有yesno按钮的简单信息框  (/否框)
     
     
    具体使用这些选项的时候,格式如下:
     
     
     
     

     
     
    dialog的使用格式:
    dialog   --common-options   --boxtype  “text” Height  Width  --box-specific-option
    --common-options   这个选项来设置dialog box的背景,颜色和 标题等。
    所有的对话框有至少三个参数,
    “文本“:在标题或框内容。
    “高度”:在对话框的高度。
    “宽度”:在对话框的宽度。
     
    dialog  - -print-max-size  
    dialog  - -create-rc  file  
     
    好了,什么也不多说了,先看一个简单的例子:(如果没有安装dialog要先安装一下)
    #dialog  - -backtitle  “The  first  dialog  box ”  - -title  “hello”  - -yesno  “Is this  your  first dialog box?”  7 25
     
     
     
    常见的通用选项有:
    - -backtitle  backtitle  指定backtitle字符串显示在背景下,在屏幕的顶部。
    - -begin  y  x       指定的位置在屏幕上的上一个对话框的左上角
    - -colors             解读嵌入式“/ Z”的对话框中的文本序列由下面的字符 0-7, b  B, u, U, ect,恢复正常的设置使用“/Zn”
    - -defaultno          使的是默认值 yes/no,使用no
    - -default-item string 设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
    - -insecure         输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点
    - -nocancel        设置在输入框,菜单,和复选框中,禁止选“cancel”
    - -nook           设置在输入框,菜单,和复选框中,禁止选“ok”
    - -no-shadow       禁止阴影出现在每个对话框的底部
    - -ok-label  string  覆盖使用“OK”按钮的标签
    - -timeout  secs    超时(返回的错误代码),如果用户在指定的时间内没有给出相应
    - -title  title       指定将在对话框的上方显示的标题字符串
    --clear            用来完成清屏操作
     
     
     
     
    消息框:
    dialog  - -msgbox  text   height  width
    例子:
    #dialog    - -title   Testing   - -msgbox  “ This   is  a test “ 10  20   
     
    yesno
    格式:dialog –yesno  text  height  width
    #dialog --title “Delete a file”  --no-shadow --yesno “Delete the file /tmp/test.txt?” 7 35
     
     
    输入框:
    格式:dialog --inputbox text height width
    #dialog --title “Input your name”  --inputbox “Please input your name:” 10 30  2> /tmp/name.txt   (这里的2>是将错误信息输出重定向到了/tmp/name.txt文件中)
     
     
     
    - -extra-button  添加按钮
    - -extra-label   string  添加额外的标签
     
    文本框:
    格式:dialog --textbox file height width
    例子:
    #dialog   --title   “The fstab”  - -textbox /etc/fstab  17 40
     
    - -exit-label  string  定义退出的标签串
    #dialog  --title  “The fstab”  --exit-label QUIT –textbox  /etc/fstab  17 40
     
     
     
    菜单框:
    格式:dialog --menu text height width  menu-height tag1 item1 tag2 item2 …
    例子:
    #dialog --title “pick a choice” --menu “Choose one” 12 35 5 1 “Display the disk usage” 2 “Display the meminfo” 3 “Exit”
     
     
     
    Fselect
    格式:dialog --fselect filepath height width dialog --fselect filepath height width
    例子:
    #dialog  –title  “Pick one file”  --fselect /root/  7  40
     
     
     
    进度框架:
    格式:dialog --gauge text height width  [<percent>]
    例子:
    编辑一个gauge.sh 的脚本
    内容如下:
    #!/bin/bash
    #vim  gauge.sh
    Let  PERCENT=0
    (
    for  I in /etc/*
    do
     if  [ $PERCENT  -gt 100 ];  then
         break
    else
       cp  -r  $I  /tmp/test  2>  /dev/null
       echo  ‘XXX’
       echo   “Copy the  file $I …”
       echo   ‘XXX’
       echo  $PERCENT
     fi
     PERCENT=$[  $PERCENT+1 ]
     Sleep  1
    done )  dialog   --title  “Copying….”  --gauge “Starting  to  copy  files…”  6  50  0
     
    #bash  gauge.sh  (执行脚本的时候注意修改权限)
     
     

     
    from框架
    格式:dialog --form text height width formheight [ label y x item y x flen ilen ] ...
    其中
    flen 表示field length,定义了:选定字段中显示的长度
    ilen 表示 input-length, 定义了:在外地输入的数据允许的长度
    使用up/down(或ctrl/ N,ctrl/ P)在使用领域之间移动。使用tab键在窗口之间切换。
    例子:
    # dialog --title "Add a user" --form "Please input the infomation of new user:" 12 40 4  /
      "Username:" 1  1 "" 1  15  15  0  /
      "Full name:" 2  1 "" 2  15  15  0  /
      "Home Dir:" 3  1 "" 3  15  15  0  /
      "Shell:"    4   1 "" 4  15  15  0     
     
     
     
     
    密码框:
    格式:
    dialog  --passwordbox text height width [init]
    例子:
    # dialog --title "Password"  --passwordbox "Please give a password for the new user:" 10 35
     
     
    (我在框中输入了密码redhat
    我想您也发现了,这样我们的密码就暴露出来了,是不是很不安全,所以通常我们会加上一个安全选项
    --insecure   将每个字符用*来显示出来
    #dialog  --title  “Password”  --insecure  --passwordbox  “Please  give  a  password  for the  new  user:”  10  35
     
     
    (这样就安全点)
    在脚本使用dialog会让我们的脚本更智能化和更易于跟用户进行交互。所以使用dialog还是很有必要的!
    展开全文
  • wxPython学习手册

    热门讨论 2014-04-19 08:01:58
    12.3.4 预定义的颜色名有哪些? 392 12.4 本章小结 392 第三部分 高级wxPython 394 13 建造列表控件并管理项目 395 13.1 建造一个列表控件 395 13.1.1 什么是图标模式? 396 13.1.2 什么是小图标模式? 397 13.1.3 ...
  • 注:参数化三种方式 1、格式为txt 2、格式为csv 3、randomstring 随机生成 方法一:randomstring 随机生成 注:此方法缺点就是随机容易生成重复数据 步骤一: 创建http请求 步骤二:添加函数对话框 步骤三:把...
  • visio教程PDF

    热门讨论 2010-05-17 23:56:22
    1.3 哪些人可以使用Visio 1.3.1 涉及Visio技术的公司和职业 1.3.2 选择适合自己需求的Visio版本 1.3.3 获得Visio支持的方式 1.4 Visio的功能 1.5 标准的SmartShape模板 1.5.1 Block Diagrams ...
  • 三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下...
  • 中文版Excel.2007高级VBA编程宝典 1/2

    热门讨论 2012-04-06 16:00:16
     6.3.4 创建自定义的对话框  6.3.5 在工作表上使用ActiveX控件  6.3.6 执行开发的成果  6.4 使自己关心终端用户  6.4.1 测试应用程序  6.4.2 尽量完善应用程序的安全性  6.4.3 让应用程序变得美观和直观  ...
  • c++面试题基础分享.doc

    2020-03-24 21:40:59
    面对内存泄漏和指针越界,你有哪些方法? 48.变量的声明和定义有什么区别 49.sizeof是一个操作符,strlen是库函数 50.写一个“标准”宏MIN 51.简述strcpy sprintf与mencpy的区别 52.链表与数组的区别 53.简述...
  • Microsoft C# Windows程序设计(上下册)

    热门讨论 2011-08-05 10:28:13
    16.2 模式对话框的中止 16.3 接受和取消 16.4 屏幕位置 16.5 about对话框 16.6 定义对话框中的属性 16.7 实现apply按钮 16.8 无模式对话框 16.9 通用对话框 16.10 选择字体和颜色 16.11 使用...
  • flash shiti

    2014-03-14 10:32:41
    45.新增图层的方法有: A. 选择Insert菜单下的Layer命令 B. 按下图层编辑区左下方的钮 C. 按下图层编辑区左下方的钮 D. 选择File菜单下的Layer命令 FLASH 样题参考答案 1.D 2.D 3.C 4.B 5.B 6.A 7.D 8.B 9.D ...
  • javascript常用对象梳理

    2012-06-23 21:29:38
    另外,该对象的实例也可由window.open()方法创建。由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.[removed]()可以简写成: [removed]()。 ...
  • 逻辑结构和物理结构相互独立,所以网络的物理结构及其域结构之间没有必要的相关性,活动目录允许单个站点中多个域,单个域中多个站点。 2 p h5 x$ E8 O, \0 s( d" q+ l; n. t6 E0 z4 F/ R1 ?$ F 如果配置方案未...
  • 6.ADO.net中常用的对象有哪些?分别描述一下。 答:connection command sqladapter dataset datatable dataview等等.写不完了. 7.如何理解委托? 答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    34.EJB规范规定EJB中禁止的操作有哪些? 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、...
  • Visual Studio程序员箴言中文扫描PDF

    热门讨论 2010-12-28 01:04:18
    技巧5.50 为何“对象浏览器”很多可以绑定的命令(以及如何创建一个可清除搜索结果的键盘快捷键) 135 技巧5.51 在“对象浏览器”中使用全局命令视图.前进(alt+右箭头)和视图.后退(alt+左箭头) 136 第6章 了解...
  • 要了解1.6版本中API有哪些变化,详见http://developer.android.com/sdk/RELEASENOTES.html。  本书中对纯Java 游戏和混合游戏的内容做了合理的划分,安排如下:  第1章  作为第一步,这一章首先建立一个Linux...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    技巧2.29 为快速查找的所有结果创建书签 46 2.4 IntelliSense 47 语句完成、参数信息和完成单词 47 技巧2.30 使用Ctrl+J键调用语句完成 48 技巧2.31 显示函数的参数信息 48 技巧2.32 显示函数的快速信息 ...
  • 进入主窗口,如果错则弹出警告对话框。 实现原理: 通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用 if 语句进行判断。 实现过程: 1.先新建Qt4 Gui Application 工程,工程名为mainWidget...
  • ②在普通窗口中,直接创建一个CXPButton类对象,然后在OnCreate()中调用CXPButton的Create方法; 以下的章节将综合地使用以上的方法,请读者朋友留心观察。 3.2 使用MFC类的既函数 在界面美化的专题中,MFC也...
  • PowerPoint.2007宝典 8/10

    2012-04-01 18:39:23
    9.1.1 利用“插入表格”对话框创建表格 169 9.1.2 利用“表格”按钮创建表格 169 9.1.3 绘制表格 170 9.2 在表格中来回移动 171 9.3 选择行、列和单元格 171 9.4 编辑表格的结构 172 9.4.1 调整整个...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    3.6.4 创建自定义的取值方法和赋值方法 83 3.6.5 属性的特性 84 3.7 简单的内存管理 85 3.7.1 创建对象 85 3.7.2 创建自动释放的对象 86 3.7.3 自动释放对象的生命周期 87 3.7.4 保留自动释放的对象 87 ...
  • Python编程入门经典

    热门讨论 2013-10-27 14:17:39
    7.1.2 通过已模块创建新模块 102 7.1.3 从命令行开始使用模块 104 7.1.4 改变导入方式 106 7.2 包 106 7.3 模块和包 108 7.3.1 将所有内容引入当前 作用域 108 7.3.2 重新导入模块和包 109 7.4 测试模块和包的基础...
  • 方法中使用了RxView来增强view的clicks事件,.throttleFirst()限制订阅者在指定的时间内重复执行,最后通过BindingCommand将事件回调出去,就好比一种拦截器,在点击时先做一下判断,然后再把事件沿着他原有的...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

创建对话框有哪些方法