精华内容
下载资源
问答
  • 那就是异常信息通过文档地形式保存下来,如果用户在使用的时候程序出了异常,可以让用户对应的日志信息发给我们或客服人员,更好的是在程序中做好处理,日志发到指定服务器(程序中记得添加网络权限哦)中,...
  • 做程序开发,肯定离不开与BUG打交道,更加离不开程序异常的出现。在开发的时候,我们可以通断点调试,... 是异常信息通过文档地形式保存下来,如果用户在使用的时候程序出了异常,可以让用户对应的日志信息发给我们
     做程序开发,肯定离不开与BUG打交道,更加离不开程序异常的出现。在开发的时候,我们可以通断点调试,日志打印,异常捕获工具等方式发现或处理程序   
     中的Exception。那客户在使用我们的应用时,程序了问题,我们怎么可以知道呢?当然,我们可以加上友盟统计等第三方工具。另外还能怎么做呢?那就
     是把异常信息通过文档地形式保存下来,如果用户在使用的时候程序出了异常,可以让用户把对应的日志信息发给我们或客服人员,
     更好的是在程序中做好处理,把日志发到指定服务器(程序中记得添加网络权限哦)中,我们也可以拿到日志,我们就能发现问题,处理问题啦。
    异常捕获的关键代码:
    
    /**
     * UncaughtExceptionHandler:线程未捕获异常控制器是用来处理未捕获异常的。 实现该接口并注册为程序中的默认未捕获异常处理
     * 这样当未捕获异常发生时,就可以做些异常处理操作 例如:收集异常信息,发送错误报告 等。
     * 
     * @description:
     * @author ldm
     * @date 2016-4-18 上午11:31:19
     */
    public class MyExceptionHandler implements UncaughtExceptionHandler {
        // 上下文
        private Context mContext;
        // 是否打开上传
        public boolean openUpload = true;
        // Log文件路径
        private static final String LOG_FILE_DIR = "log";
        // log文件的后缀名
        private static final String FILE_NAME = ".log";
        private static MyExceptionHandler instance = null;
        // 系统默认的异常处理(默认情况下,系统会终止当前的异常程序)
        private UncaughtExceptionHandler mDefaultCrashHandler;
    
        private MyExceptionHandler(Context cxt) {
            // 获取系统默认的异常处理器
            mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();
            // 将当前实例设为系统默认的异常处理器
            Thread.setDefaultUncaughtExceptionHandler(this);
            // 获取Context,方便内部使用
            this.mContext = cxt.getApplicationContext();
        }
    
        public synchronized static MyExceptionHandler create(Context cxt) {
            if (instance == null) {
                instance = new MyExceptionHandler(cxt);
            }
            return instance;
        }
    
        /**
         * 当程序中有未被捕获的异常,系统将会自动调用#uncaughtException方法
         * thread为出现未捕获异常的线程,ex为未捕获的异常,有了这个ex,我们就可以得到异常信息。
         */
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            try {
                // 保存导出异常日志信息到SD卡中
                saveToSDCard(ex);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 如果系统提供了默认的异常处理器,则交给系统去结束我们的程序,否则就由我们自己结束自己
                Toast.makeText(mContext,
                        "很抱歉,程序出错,即将退出:\r\n" + ex.getLocalizedMessage(),
                        Toast.LENGTH_LONG).show();
                if (mDefaultCrashHandler != null) {
                    mDefaultCrashHandler.uncaughtException(thread, ex);
                } else {
                    ex.printStackTrace();
                }
            }
        }
    
        /**
         * 保存文件到SD卡
         * 
         * @description:
         * @author ldm
         * @date 2016-4-18 上午11:37:17
         */
        private void saveToSDCard(Throwable ex) throws Exception {
            File file = FileUtil.getAppointFile(mContext.getPackageName()
                    + File.separator + LOG_FILE_DIR,
                    getDataTime("yyyy-MM-dd-HH-mm-ss") + FILE_NAME);
            PrintWriter pw = new PrintWriter(new BufferedWriter(
                    new FileWriter(file)));
            // 导出发生异常的时间
            pw.println(getDataTime("yyyy-MM-dd-HH-mm-ss"));
            // 导出手机信息
            savePhoneInfo(pw);
            pw.println();
            // 导出异常的调用栈信息
            ex.printStackTrace(pw);
            pw.close();
        }
    
        /**
         * 保存手机硬件信息
         * 
         * @description:
         * @author ldm
         * @date 2016-4-18 上午11:38:01
         */
        private void savePhoneInfo(PrintWriter pw) throws NameNotFoundException {
            // 应用的版本名称和版本号
            PackageManager pm = mContext.getPackageManager();
            PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(),
                    PackageManager.GET_ACTIVITIES);
            pw.print("App Version: ");
            pw.print(pi.versionName);
            pw.print('_');
            pw.println(pi.versionCode);
            pw.println();
    
            // android版本号
            pw.print("OS Version: ");
            pw.print(Build.VERSION.RELEASE);
            pw.print("_");
            pw.println(Build.VERSION.SDK_INT);
            pw.println();
    
            // 手机制造商
            pw.print("Manufacturer: ");
            pw.println(Build.MANUFACTURER);
            pw.println();
    
            // 手机型号
            pw.print("Model: ");
            pw.println(Build.MODEL);
            pw.println();
        }
    
        /**
         * 根据时间格式返回时间
         * 
         * @description:
         * @author ldm
         * @date 2016-4-18 上午11:39:30
         */
        private String getDataTime(String format) {
            SimpleDateFormat df = new SimpleDateFormat(format);
            return df.format(new Date());
        }
    }

    使用的时候,我们需要在Application中初始化:

    
    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            MyExceptionHandler.create(this);
        }
    }
    

    在AndroidManifest.xml文件中注册好Application:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.ldm.exception"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="21" />
    
        <uses-permission android:name="android.permission.INTERNET" />
    
        <application
            android:name="com.ldm.exception.MyApplication"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.ldm.activity.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    文件上传的方法有写好,但是没有具体实现,比如一但有日志文件就上传或是日志文件达到一定大小再上传,这就要根据实际情况来定啦。
    当我们应用出现异常时,在手机文件夹中存在我们应用包名的文件夹,里面就有日志文件。
    Demo下载地址:http://download.csdn.net/detail/true100/9494512
    
    展开全文
  • 大部分设计师都会设计作品保存为cad格式,这样便于后期对于作品的整改。当作品设计成型后需要将作品图纸进行打印,但是cad格式的图纸打印下来并不是很清晰,因此就需要将cad转换为高清图片,之后再进行图片打印。...

    大部分设计师都会把设计作品保存为cad格式,这样便于后期对于作品的整改。当作品设计成型后需要将作品图纸进行打印,但是cad格式的图纸打印下来并不是很清晰,因此就需要将cad转换为高清图片,之后再进行图片打印。接下来小编就将总结出得cad如何转成图片的操作方法告诉大家。

     

    1a9b20e1d326c67c8dc932cefac2772b90c.jpg


     使用工具:迅捷PDF转换器
    1.cad本身只是个设计工具,自己无法直接进行文件格式的转换。因此将cad转换为图片就需要使用转换工具。此时大家可在百度中搜索关键词pdf转换器,接着把其下载安装到电脑桌面中。


     


    2.接下来就要将转换器给打开,进入界面内首先要做得就是功能地选择。鼠标点击选中特色功能选项,再继续使用鼠标点击下方显示的众多子功能中的CAD转图片选项。


     


    3.然后使用鼠标点击添加文件选项,在跳出的窗口内找到要转换的cad文件并用鼠标左击选中,之后再点击窗口内右下角的打开选项,就能把cad文件成功添加到转换器内。


     6912363c248b926289b5618163add784ff4.jpg


    4.把文件添加后,可在转换器界面内对转换后的图片色彩、页面大小、背景颜色以及图片格式,根据个人选择进行设置。

     

    a690bd62971e74847eac1fe5ceb2cc63ef6.jpg

     

    5.紧接着就要给转换后的图片设置个保存路径,大家可点击界面内输出目录旁的原文件夹选项,就可将转换后的图片和原cad图片存在相同文件夹,便于转换后的查找与使用。


     1f9b53bb33b3d675d68756e98817d682526.jpg


    6.接下来大家就可以使用鼠标点击转换器界面右下角的开始转换选项了,在转换过程中请保持网络状况良好,待到界面内状态栏下方的方框中数字变为100%时,说明转换已经完成了。


     52c24706cc235650b894a648bae5e3111b9.jpg


    7.在转换完成后,大家想马上使用或查看转换后的图片,即可点击状态栏右侧打开选项下方的小文件夹图标,就能自动将转换后的图片给打开了。

     

    d6290a9ee6ec1981fa416e1e9cf1be80029.jpg

     

    Cad如何转换成图片小编已经在文章中详细地教给小伙伴们了。虽说不是从事设计工作的小伙伴们很少接触到cad,但是会得多总是好的,以备今后工作中的不时之需。

    转载于:https://my.oschina.net/u/3959971/blog/2933804

    展开全文
  • 想要自己喜欢的网页截图存下来,你知道网页长截图怎么截吗?使用Mac电脑的你无需安装任何软件,仅凭自带的 Safari 浏览器即可实现网页长截图。想知道电脑网页截屏怎么截长图的朋友,跟随macw小编一起来学习借助...

    想要把自己喜欢的网页截图存下来,你知道网页长截图怎么截吗?使用Mac电脑的你无需安装任何软件,仅凭自带的 Safari 浏览器即可实现网页长截图。想知道电脑网页截屏怎么截长图的朋友,跟随macw小编一起来学习借助Safari对整个网页进行长截图吧!

    打开需要长截图的网站,点击菜单栏中的文件 - 打印(⌘+P

    点击显示详情信息

    默认的纸张大小是 A4,左边的预览图会显示打印此网页需要多少张 A4纸

    点击纸张大小 -管理自定义大小

    调整纸张高度和宽度

    接着点击左下角的 PDF 下拉选框,单击保存为 PDF

    OK,一张长截图就制作好啦!

    动图演示

    注:

    如果网页支持阅读器模式,长截图会更加简洁优雅

    打印机设备必须为空,否则无法自定义纸张大小

    展开全文
  • 保存完毕之后,可以通过两种方式立即生效,其一为输入source ~/.zshrc或者source ~/.bashrc来使配置立即生效,或者完全关闭命令行,然后重新打开一个即可,接下来就可以在任何位置使用qshell命令了。 Windows平台 ...
  • CHK:由Windows磁盘碎片整理器或磁盘扫描保存文件碎片 CHM:编译过的HTML文件 CHP:Ventura Publisher章节文件 CHR:字符集(字体文件) CHT:ChartViem文件;Harvard Graphics矢量文件 CIF:Adaptec CD 创建...
  • epson counter reset

    2011-06-07 19:54:01
    Make test report:测试打印机,生成一个文件testrep.txt,这个文件保存在程序所安装的目录下。里面包含一些打印机相关的数据。 八、FAQ(常见问题) 1. 使用精灵程序我要做什么? 精灵程序只支持EPSON打印机,并且...
  • EmEditor Pro(文本编辑器) V15.9.0 绿色...关于如何将 EmEditor 转变为便携软件,请看这里,或直接在 EmEditor.exe 目录下建立一个 eeUseIni.ini 文件,EmEditor 就会使用 ini 文件保存所有配置,达到绿色便携化运行。
  • Make test report:测试打印机,生成一个文件testrep.txt,这个文件保存在程序所安装的目录下。里面包含一些打印机相关的数据。 八、FAQ(常见问题) 1. 使用精灵程序我要做什么? 精灵程序只支持EPSON打印机,并且...
  • 一、是要所写的字,由丑到美,由差到好的过程保存下来,方便对照。不想练的时候,觉得没有进步的时候,看看以前的丑字又会给自己无穷的动力:原来自己进步蛮大,天天练习还是有意义的。 二、是寻找志同道合者,对...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 ...
  • 仔细移动机器人实现建图,然后我们建好的地图保存下来,新打开一个终端执行 rosrun map_server map_saver -f turtlebot_test_map 注意:上面指令第一个是 map_server ,第二个是 map_saver ,一个server,一个...
  • 139/TCP--NetBIOS会话服务,NetBIOS会话服务是TCP/IP上的NetBIOS(NetBT)协议族的一部分,它用于服务器消息块(SMB)、文件共享和打印。请设置防火墙开启相应的端口。一般只要在防火墙中允许文件夹和打印机共享服务就...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    技巧1.35 把文件路径打印为页眉 24 1.5 状态栏 24 状态栏选项 24 技巧1.36 隐藏状态栏 25 第2章 让编辑器的使用得心应手 26 2.1 高级编辑 26 2.1.1 选择 26 技巧2.1 使用编辑器中的块/列选择 26 技巧...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    另外他对我上一集中说Microsoft越来越不要脸也极为生气,因为相比之下,Sun也不怎么样,微软已经将C#提交设在日内瓦的ECMA(European Computer Manufacturers' Association,国际标准化机构欧洲电子计算机工业会)并...
  • 给一个 Bean 的 message 属性, 字符串类型, 注入值为 "Hello" 的 XML 配置文件怎么写? 125 19、Jdo是什么? 125 20、什么是spring的IOC AOP 126 21、STRUTS的工作流程! 126 22、spring 与EJB的区别!! 126 八. ...
  • CRM客户销售管理软件B/S

    热门讨论 2012-08-09 15:56:22
    1 修改 配置文件 properties.config 和 web.config 的数据库连接参数,改后重新编译一下 2 登陆的用户名:admin 密码 123456 先进营销管理思想和现代信息技术的最佳结合。以客户关系管理为线索,集实用 CRM 及 OA ...
  • 近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,收到的数据在BAM上打印出来, 结果打印出来的...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

怎么把打印文件保存下来