东东东 陈煜东的博客

分类存档: Java ( 2 / 2)

在java学习中的文章

Exception一定要被处理,不只是catch

写了个小程序,用多线程去抓取一堆文件,编号是连续的,于是我开了100个线程去抓取,运行的时候,报异常了,貌似是栈溢出了。

后来改成20,再去抓取,这次就行了看见一个个那边下载,但是有时候能看见一些异常,这个异常是IO异常,具体不知道原因,因为下载许多个文件才出现一次。

反思

直接在catch中写e.printStackTrace()太糟糕了。除非是简单的一个小调试,测试代码是否能工作。如果真的在正式场合,或者该该异常后面的代码执行会对你的需求产生影响,就需要将其处理了,并且写入到文件中。这样以后才能检查到哪里出了问题。

这样多线程下载文件,不知道哪个没有下载下来,所以以后在处理异常的时候,应该把该异常处理的那个文件编号保存到文件里,这样在下载后就能查看哪个文件没下载完了。

把代码贴出来,这个是我用多线程下载连续文件的方法,并把它分成了好几个部分,每个部分下载自己的那部分,不会妨碍到其他的线程。

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.imageio.ImageIO;

public class SaveFile {
    private int intervalLength = 1000;//每个线程处理的区间长度

    private long finalId = 152000;//最后一个文件的id

    private static ExecutorService pool = Executors.newFixedThreadPool(20);

    private Integer lock=0;//区间的索引值,锁,用于多线程之前的赋值

    /**
     * 下载第i个
     * 
     * @param i
     */
    public void download(long i) {
        //TODO 写自己的下载代码吧
    }

    public void start() {
        System.out.println("has segment:"+finalId/intervalLength);

        for (lock = 0; lock <= finalId/intervalLength; lock++) {

            synchronized (lock) {
                //把当前的区间赋值给临时变量,如果直接用lock,
                //那么多线程里的数值就变成了最后一个了,速度太快了。
                final long a = lock;
                pool.execute(new Runnable() {
                    @Override
                    public void run() {
                        for (long i = a*intervalLength; i < (a+1)*intervalLength; i++) { 

                            download(i);
                        }
                    }
                });
            }

        }
    }

    public static void close(){
        pool.shutdown();
    }

    public static void main(String[] args) {
        SaveFile s=new SaveFile();
        s.start();
        SaveFile.close();
    }
}

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Exception一定要被处理,不只是catch – https://www.chenyudong.com/archives/exception-must-be-resolved.html

分类: 未分类

CentOS yum安装sun Java jre jdk和openjdk

在Linux下的tty终端下,安装sun jre,但是去Oracle安装,下载居然还要登录,使用cookie,没办法。直接到http://www.java.com/下载了。

说明:如果使用yum install 安装软件,具体的软件名称不知道,tab又不管用,可以使用yum list j* 来查看相关的软件名称

安装sun JDK

进入http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,寻找最新的JDK地址,在以下代码中url替换最新的jdk地址。

没办法直接通过wget下载,需要cookie。(感谢网友评论留下的方法。)

wget --no-check-certificate --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u15-b03/jdk-7u15-linux-x64.rpm"

改名后,使用一下代码安装

yum install jdk-7u15-linux-x64.rpm

安装sun jre

到http://java.com/zh_CN/download/manual.jsp找到自己的版本下载,我的是下载Linux x64 RPM,地址http://javadl.sun.com/webapps/download/AutoDL?BundleId=67387

下载jre,并重命名

wget -O jre-7u6-linux-x64.rpm http://javadl.sun.com/webapps/download/AutoDL?BundleId=67387

安装

yum install jre-7u6-linux-x64.rpm

安装成功

[root@317304 ddd]# java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)

安装openjdk

yum install java-1.7.0-openjdk

参考:http://openjdk.java.net/install/

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: CentOS yum安装sun Java jre jdk和openjdk – https://www.chenyudong.com/archives/centos-yum-install-sun-java-jre.html

分类: 未分类

swt/jface中FileDialog的使用

在SWT/JFace中,使用文件对话框选择文件。貌似awt和swing应该都提供文件选择对话框,不过之前都没用过。有了自带的文件对话框,就不用可以把更多的时间发在其他功能的实现上了。

下面说说具体的org.eclipse.swt.widgets.FileDialog的使用

选择单个文件

FileDialog dialog = new FileDialog(window.getShell(), SWT.OPEN);
dialog.setFilterPath("");// 设置默认的路径
dialog.setText("对话框标题");//设置对话框的标题
dialog.setFileName("");//设置默认的文件名
dialog.setFilterNames(new String[] { "文本文件 (*.txt)", "所有文件(*.*)" });//设置扩展名
dialog.setFilterExtensions(new String[] { "*.txt", "*.*" });//设置文件扩展名
String fileName = dialog.open();//

选择多个文件

FileDialog dialog = new FileDialog(shell,SWT.OPEN|SWT.MULTI);
String fileName = dialog.open();//返回最后一个选择文件的全路径
String[] fileNames = dialog.getFileNames();//返回所有选择的文件名,不包括路径
String path = dialog.getFilterPath();//返回选择的路径,这个和fileNames配合可以得到所有的文件的全路径

保存文件对话框

FileDialog dialog = new FileDialog(shell,SWT.SAVE);
 String fileName = dialog.open();  //获得保存的文件名

此方法只能获得用户的路径+文件名,需要自己写方法去保存文件,如果用Java7,那么就用NIO,方便快捷。比如Files.write()方法。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: swt/jface中FileDialog的使用 – https://www.chenyudong.com/archives/swt-jface-using-filedialog.html

分类: 未分类

unicode与字符相互转换

在许多场合中,我们会使用到Unicode码,但是unicode编码的形式我们却没办法直观知道是哪个字符,这样我们就需要对讲Unicode码转换成我们认识的汉字字符。

什么是Unicode?

Unicode(统一码、万国码、单一码、标准万国码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简化地方式来呈现和处理文字。

–Wikipedia

Unicode字符用什么表示?

Unicode通常使用U+XXXX,XXXX四位十六进制数,例如U+4F60。但是在Unicode 3.0后,Unicode使用“U-”然后紧接着八位十六进制数,在Unicode 3.0之前,使用的”U+”后面跟的四位十六位进制数。

在Java对Unicode的实现就不是用这样表示的。Java的形式是”\uXXXX”,例如”\u4F60” 是汉字“你”。

有时候,我们使用在文件中使用汉字字符,但是当文件的编码发生改变的时候,那么就会出现乱码了。如果我们使用unicode的转移形式(”\uXXXX”)去表示中文,那么我们改变文件的编码的时候,就不会出现乱码了,因为我们使用的是ASCII字面值去存储文本的。

但是这样观看Unicode码不够直观,我们不知道具体是什么汉字,所以我们需要通过转换,这样我们就知道具体对应的是什么汉字了。

将Unicode码转化为汉字字符

public static String UnicodetoString(String s){
    String ss[] =  s.split("\\\\u");
    StringBuilder sb=new StringBuilder(ss.length-1);
    for (int i = 1; i < ss.length; i++) {
        sb.append((char)Integer.parseInt(ss[i], 16));
    }
    return sb.toString();
}

获取汉字字符的Unicode码

public static String StirngtoUnicode(String s){
    StringBuilder sb=new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        sb.append(String.format("\\u%04x", (int)s.charAt(i)));
    }
    return sb.toString();
}

 

因为String.format()方法是用return new Formatter().format(format, args).toString(); 所以先创建一个Formatter对象,减少对象的使用。

public static String StringtoUnicode(String s){

    Formatter formatter = new Formatter();
    for (int i = 0; i < s.length(); i++) {
        formatter.format("\\u%04x", (int)s.charAt(i));
    }
    return formatter.toString();
}

http://docs.oracle.com/javase/tutorial/i18n/text/string.html

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: unicode与字符相互转换 – https://www.chenyudong.com/archives/unicode-and-characters-converted-into-each-other.html

分类: 未分类

ISafeRunnable 类定义未找到

在开发swt应用中,使用了TableViewer类,导入了org.eclipse.jface_3.7.0.v20110928-1505.jar类库了,eclipse也不报错了,但是运行是就是报以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/ISafeRunnable
at gui.Table.(ZZZTable.java:23)
at gui.Table.main(ZZZTable.java:91)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.ISafeRunnable

根据给出的提示说org/eclipse/core/runtime/ISafeRunnable未找到,于是就引入了org.eclipse.core.runtime_3.7.0.v20110110.jar包,运行时还是报这个错误。

后来得知,这个错误是由于给类的定义是在org.eclipse.equinox.common_3.6.0.jar,这样运行是不报错了。在http://www.eclipsezone.com/eclipse/forums/m92035942.html说到

The ISafeRunnable interface is located in the equinox plugin (org.eclipse.equinox.common). If you add the SWT library to your project, it should be added to the build path automatically. You can do this by right-clicking your project, choosing Build Path/Add Libraries… and then selecting the SWT Library. Afterwards, your project should contain a new folder, having the same icon as the JRE folder, and containing a couple of jars, including org.eclipse.swt… and org.eclipse.equinox.common.

查看了下ISaftRunnable该类的定义说明

Safe runnables represent blocks of code and associated exception handlers. They are typically used when a plug-in needs to call some untrusted code (e.g., code contributed by another plug-in via an extension). This interface can be used without OSGi running. Clients may implement this interface.

不过我在导入这个类库是在eclipse rpc版中导入的,不知道其他的eclipse有没有这个类库。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: ISafeRunnable 类定义未找到 – https://www.chenyudong.com/archives/isaferunnable-class-definition-not-found.html

分类: 未分类

解决org.eclipse.jface.text.IDocument cannot be resolved

在开发eclipse插件,开发语法高亮显示功能的使用到org.eclipse.jface.text.rules.RuleBasedScanner,发现默认的Plug-in Dependencies类库中没有org.eclipse.jface.text该类库,于是从eclipse默认的plugin目录下寻找,有org.eclipse.jface.text类库,在我的环境中具体文件名是

org.eclipse.jface.text_3.7.2.v20111213-1208.jar
org.eclipse.jface.text.source_3.7.2.v20111213-1208.jar  //源代码

,于是将其导入工程中,这个问题成功解决。

但是这个文件又遇到一个新的问题,就是

The type org.eclipse.jface.text.IDocument cannot be resolved. It is indirectly referenced from required .class files

发现org.eclipse.jface.text.IDocument未找到,这个类确实不再org.eclipse.jface.text这个包中,经搜索,发现是在org.eclipse.text包中,导入该包,具体文件名是

org.eclipse.text_3.5.101.v20110928-1504.jar
org.eclipse.text.source_3.5.101.v20110928-1504.jar //源代码

,解决问题。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 解决org.eclipse.jface.text.IDocument cannot be resolved – https://www.chenyudong.com/archives/resolve-that-org-eclipse-jface-text-idocument-cannot-be-resolved.html

分类: 未分类

Apache tomcat 安装与配置

Apache Tomcat作为一个开源的Java Servlet容器和支持JavaServer Pages技术的软件,在许多开发人员里使用的非常广,就连许多企业也使用它。

下载Tomcat

先从Tomcat 7下载页面下载文件,Windows下我选择Binary Distributions中的64-bit Windows zip(32bit的选择32bit的文件)。

安装Tomcat、设置Tomcat环境变量

Windows下安装

将文件解压缩到一个目录下,Windows版的已经给编译好了,直接用。设置CATALINA_HOME、JAVA_HOME环境变量,在环境变量中添加

CATALINA_HOME : D:\mydevelop\server\apache-tomcat-7.0.22
JAVA_HOME : E:\Program Files (x86)\Java\jdk1.7.0_02

为了更好的编写项目,如果没有请添加以下环境变量,

PATH : ;.;%JAVA_HOME%\bin;

打开 {$TOMCAT_HOME}\bin\starup.bat 运行服务器,访问 http://localhost:8080/ 如果可以访问则成功。

Linux下安装

1.将下载来的文件解压缩

tar -zxvf apache-tomcat-7.0.33.tar.gz

2.复制文件

cp -r apache-tomcat-7.0.33 /usr/local/tomcat

3.启动服务器

/usr/local/tomcat/bin/startup.sh

配置Tomcat

打开编辑%CATALINA_HOME%\conf\server.xml

更改端口号

<!-- 用http://localhost/ 访问 -->

<!--修改后-->

Linux下使用1024以下端口需要权限。

添加web app

    ... <!-- 添加Context元素,使用http://localhost/dl/ 访问子目录 -->
<Host name="baiduclub" debug="0" appBase=""
 unpackWARs="true" autoDeploy="true" deployIgnore=".svn"
 xmlValidation="false" xmlNamespaceAware="false">
 <Logger className="org.apache.catalina.logger.FileLogger"
 directory="logs" prefix="baiduclub_log." suffix=".txt"
 timestamp="true"/>
 <Context path="/dl/" reloadable="true" docBase="D:\mydevelop\po\WebRoot" />
 </Host>

如果有需要的话,可以安装一个Mysql数据库,用来涉及到数据库的实验。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Apache tomcat 安装与配置 – https://www.chenyudong.com/archives/apache-tomcat-install-and-configure.html

分类: 未分类

较新的文章

Copyright © 2021 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑