??xml version="1.0" encoding="utf-8" standalone="yes"?> import java.io.FileInputStream; import sun.audio.AudioPlayer; public class Sound {
]]>
import sun.audio.AudioStream;
}
解决办法Q在Build Path里面把JRE System LibraryU除后重新添加进去,问题解决
三种配置环境变量的方?br />
1. 修改/etc/profile文g
如果你的计算Z仅作为开发用时推荐使用q种ҎQ因为所?strong>用户的shell都有权用这些环境变量,可能会给pȝ带来安全性问题?
·用文本编辑器打开/etc/profile
·在profile文g末尾加入Q?
export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
·重新d
·注解
a. 你要?/usr/share/jdk1.6.0_14改ؓ你的jdk安装目录
b. linux下用冒号“:”来分隔\?
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的?
?strong>讄环境变量时特别要注意不能把原来的值给覆盖掉了Q这是一U?
常见的错误?
d. CLASSPATH中当前目?#8220;.”不能?把当前目录丢掉也是常见的错误?
e. export是把q三个变量导Zؓ全局变量?
f. 大小写必M格区分?/p>
2. 修改.bash_profile文g
q种Ҏ更ؓ安全Q它可以把用这些环境变量的权限控制?strong>用户U别Q如果你需要给某个用户权限使用q些环境变量Q你只需要修改其个h用户ȝ录下?bash_profile文g可以了?
·用文本编辑器打开用户目录下的.bash_profile文g
·?bash_profile文g末尾加入Q?/p>
export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
·重新d
3. 直接在shell?strong>讄变量
不赞成用这U方法,因ؓ换个shellQ你?strong>讄无效了Q因此这U方法仅仅是临时使用Q以后要使用的时候又要重?strong>讄Q比较麻烦?
只需在shelll端执行下列命oQ?
export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
package serializable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectToIO
{
/**
*
* 对象?/span>Byte数组
*
* @param obj
*
* @return
*
* @throws Exception
*
*/
public static byte[] objectToBytes(Object obj) throws Exception
{
// logger.debug("objectToString called ");
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream sOut = new ObjectOutputStream(out);
sOut.writeObject(obj);
sOut.flush();
byte[] bytes = out.toByteArray();
// logger.debug(bytes.toString());
return bytes;
}
/**
*
* 字节数组转对?/span>
* @param content
*
* @return
*
* @throws Exception
*
*/
public static Object bytesToObject(byte[] bytes) throws Exception
{
// logger.debug("bytesToObject called ");
// byte?/span>object
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
ObjectInputStream sIn = new ObjectInputStream(in);
return sIn.readObject();
}
}
轉自:http://wenku.baidu.com/view/1e0a23b465ce050876321373.html
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* This class deals with maintaining options, including the e-mail account.
*
* @author <a href="mailto:fzammetti@omnytex.com">Frank W. Zammetti</a>.
*/
public class OptionsManager {
/**
* Log instance.
*/
private static Log log = LogFactory.getLog(OptionsManager.class);
/**
* File name of the options file.
*/
private static final String optionsFilename = "options.properties";
/**
* This method retrieves the options and returns them. If no
* optionsFilename file is found, a 'blank' DTO is returned.
*
* @param sc ServletContext associates with the request.
* @return An OptionsDTO containing all the stored options.
*/
public OptionsDTO retrieveOptions(ServletContext sc) {
// Instantiate an OptionsDTO, and by default assume it will be configured.
// This means the application has already been configured for use. This
// affects what the user can do when the app is accessed initially.
OptionsDTO options = new OptionsDTO();
options.setConfigured(true);
// Read in the options.
InputStream isFeedFile =
sc.getResourceAsStream("/WEB-INF/" + optionsFilename);
Properties props = new Properties();
try {
if (isFeedFile == null) {
throw new IOException(optionsFilename + " not found");
}
props.load(isFeedFile);
isFeedFile.close();
} catch (IOException e) {
log.info("No " + optionsFilename + " file, a blank DTO will " +
"be returned.");
// Make sure the OptionsDTO is set as unconfigured so that when the
// index.jsp page is loaded, all the user will be allowed to do is go to
// the Options views.
options.setConfigured(false);
props.setProperty("pop3Server", "");
props.setProperty("pop3ServerRequiresLogin", "false");
props.setProperty("pop3Username", "");
props.setProperty("pop3Password", "");
props.setProperty("smtpServer", "");
props.setProperty("smtpServerRequiresLogin", "false");
props.setProperty("smtpUsername", "");
props.setProperty("smtpPassword", "");
props.setProperty("fromAddress", "");
}
// Populate OptionsDTO from options Properties.
options.setPop3Server(props.getProperty("pop3Server"));
options.setPop3ServerRequiresLogin(
props.getProperty("pop3ServerRequiresLogin"));
options.setPop3Username(props.getProperty("pop3Username"));
options.setPop3Password(props.getProperty("pop3Password"));
options.setSmtpServer(props.getProperty("smtpServer"));
options.setSmtpServerRequiresLogin(
props.getProperty("smtpServerRequiresLogin"));
options.setSmtpUsername(props.getProperty("smtpUsername"));
options.setSmtpPassword(props.getProperty("smtpPassword"));
options.setFromAddress(props.getProperty("fromAddress"));
return options;
} // End retrieveOptions().
/**
* This method saves the options.
*
* @param pop3Server The POP3 server address.
* @param pop3ServerRequiresLogin Does the POP3 server require login?
* @param pop3Username The POP3 username.
* @param pop3Password The POP3 password.
* @param smtpServer The SMTP server address.
* @param smtpServerRequiresLogin Does the SMTP server require login?
* @param smtpUsername The SMTP username.
* @param smtpPassword The SMTP password.
* @param fromAddress From address for outgoing messages.
* @param sc ServletContext associated with the request.
* @return A message saying the save was OK.
*/
public String saveOptions(String pop3Server, String pop3ServerRequiresLogin,
String pop3Username, String pop3Password, String smtpServer,
String smtpServerRequiresLogin, String smtpUsername,
String smtpPassword, String fromAddress, ServletContext sc) {
// Log what we received.
log.info("\nSaving options:\n" +
"pop3Server = " + pop3Server + "\n" +
"pop3ServerRequiresLogin = " + pop3ServerRequiresLogin + "\n" +
"pop3Username = " + pop3Username + "\n" +
"pop3Password = " + pop3Password + "\n" +
"smtpServer = " + smtpServer + "\n" +
"smtpServerRequiresLogin = " + smtpServerRequiresLogin + "\n" +
"smtpUsername = " + smtpUsername + "\n" +
"smtpPassword = " + smtpPassword + "\n" +
"fromAddress = " + fromAddress + "\n");
String result = "";
// Populate Properties structure.
Properties props = new Properties();
props.setProperty("pop3Server", pop3Server);
props.setProperty("pop3ServerRequiresLogin",
pop3ServerRequiresLogin);
props.setProperty("pop3Username", pop3Username);
props.setProperty("pop3Password", pop3Password);
props.setProperty("smtpServer", smtpServer);
props.setProperty("smtpServerRequiresLogin",
smtpServerRequiresLogin);
props.setProperty("smtpUsername", smtpUsername);
props.setProperty("smtpPassword", smtpPassword);
props.setProperty("fromAddress", fromAddress);
// Lastly, delete any existing optionsFilename file in WEB-INF and
// write out a new version from the Properties object we just populated.
// Return a message saying the operation was complete, or if any problems
// occur, a message saying what went wrong.
FileOutputStream fos = null;
try {
new File(sc.getRealPath("WEB-INF") + "/" + optionsFilename).delete();
fos = new FileOutputStream(sc.getRealPath("WEB-INF") +
"/" + optionsFilename);
props.store(fos, null);
fos.flush();
result = "Options have been saved.";
} catch (IOException e) {
log.error("Error saving contact:");
e.printStackTrace();
result = "Options could not be saved. " +
"Please review logs for details.";
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
log.error("Error closing fos: " + e);
}
}
return result;
} // End saveOptions().
} // End class.
用Java~写应用Ӟ有时需要在E序中调用另一个现成的可执行程序或pȝ命oQ这时可以通过l合使用Java提供的RuntimecdProcesscȝҎ实现。下面是一U比较典型的E序模式Q?
...
Process process = Runtime.getRuntime().exec(".\\p.exe");
process.waitfor( );
...
在上面的E序中,W一行的“.\\p.exe”是要执行的程序名QRuntime.getRuntime()q回当前应用E序的Runtime对象Q该对象的exec()Ҏ指示Java虚拟机创Z个子q程执行指定的可执行E序Qƈq回与该子进E对应的Process对象实例。通过Process可以控制该子q程的执行或获取该子q程的信息。第二条语句的目的等待子q程完成再往下执行?
但在windowsq_上,如果处理不当Q有时ƈ不能得到预期的结果。下面是W者在实际~程中ȝ的几U需要注意的情况Q?
1、执行DOS的内部命?
如果要执行一条DOS内部命oQ有两种Ҏ。一U方法是把命令解释器包含在exec()的参C。例如,执行dir命oQ在NT上, 可写成exec("cmd.exe /c dir")Q在windows 95/98下,可写?#8220;command.exe /c dir”Q其中参?#8220;/c”表示命o执行后关闭Dos立即关闭H口。另一U方法是Q把内部命o攑֜一个批命omy_dir.bat文g中,在JavaE序中写成exec("my_dir.bat")。如果仅仅写成exec("dir")QJava虚拟机则会报q行旉误。前一U方法要保证E序的可UL性,需要在E序中读取运行的操作pȝq_Q以调用不同的命令解释器。后一U方法则不需要做更多的处理?
2、打开一个不可执行的文g
打开一个不可执行的文gQ但该文件存在关联的应用E序Q则可以有两U方式?以打开一个word文档a.doc文gZQJava中可以有以下两种写法Q?
exec("start .\\a.doc");
exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
昄Q前一U方法更为简hѝ?
3、执行一个有标准输出的DOS可执行程?
在windowsq_上,q行被调用程序的DOSH口在程序执行完毕后往往q不会自动关闭,从而导致Java应用E序d在waitfor( )。导致该现象的一个可能的原因是,该可执行E序的标准输出比较多Q而运行窗口的标准输出~冲Z够大。解决的办法是,利用Java提供的ProcesscL供的Ҏ让Java虚拟机截莯调用E序的DOSq行H口的标准输出,在waitfor()命o之前dH口的标准输出缓冲区中的内容。一D典型的E序如下Q?
...
String ls_1;
Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
BufferedReader bufferedReader = new BufferedReader( \
new InputStreamReader(process.getInputStream());
while ( (ls_1=bufferedReader.readLine()) != null)
System.out.println(ls_1);
?
process.waitfor( );
...
以上内容{载~下面内容为原创!
今天在做客户端程序的自动更新Q简单描qC下,是从服务器上将更新包下载下来,然后在本地解压羃Q最后删掉~功能很简单~
但是问题出在使用JAVA的ZIP模块做文件的解压~不是想象的那么单,资源需要释放,一个不心没有办法删除掉原有ZIP文g了~资源的占用确实是个大问题Q但是好在,客户端程序更新完是要重启的,一切都烟消云散了~对于删除不掉ZIP文g的问题,我也氓一下~用DEL删除~此处一定要注意Q?/p>
Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
q样的调用是没有问题~
Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
q样写是不可能对的~
记录一下,警告一下后人!
public static Class<?> forName(String className) throws ClassNotFoundException
Class
对象。调用此Ҏ{效于:
其中Class.forName(className, true, currentLoader)
currentLoader
表示此类的定义类加蝲器?
例如Q以下代码片D返?java.lang.Thread
cȝq行?Class
描述W?
Class t = Class.forName("java.lang.Thread")
调用 forName("X") 导致名?X 的类被初始化?
className
- 所需cȝ完全限定名?
Class
对象?
LinkageError
- 如果链接p|
ExceptionInInitializerError
- 如果此方法所Ȁ发的初始化失?
ClassNotFoundException
- 如果找不到该c?/dd>Objectcȝclone()Ҏ
protected Object clone()
throws CloneNotSupportedException
是正的Q则表达式:x.clone() != x
ؓ trueQ但q些不是l对条g。一般情况下是:x.clone().getClass() == x.getClass()
ؓ trueQ但q不是绝Ҏ件?x.clone().equals(x)
按照惯例Q返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的类Q?tt>Object 除外Q都遵守此约定,?x.clone().getClass() == x.getClass()?
按照惯例Q此Ҏq回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,?super.clone q回对象之前Q有必要对该对象的一个或多个字段q行修改。这通常意味着要复制包含正在被克隆对象的内?#8220;深层l构”的所有可变对象,q用对副本的引用替换对q些对象的引用。如果一个类只包含基本字D|对不变对象的引用Q那么通常不需要修?super.clone q回的对象中的字Dc?
Object cȝ clone Ҏ执行特定的克隆操作。首先,如果此对象的cM能实现接?CloneableQ则会抛?CloneNotSupportedException?/span>注意Q所有的数组都被视ؓ实现接口 Cloneable。否则,此方法会创徏此对象的cȝ一个新实例Qƈ像通过分配那样Q严g用此对象相应字段的内容初始化该对象的所有字D;q些字段的内Ҏ有被自我克隆。所以,此方法执行的是该对象?#8220;表复制”Q而不“深层复制”操作?
Object cLw不实现接口 CloneableQ所以在cMؓ Object 的对象上调用 clone Ҏ会D在运行时抛出异常?
CloneNotSupportedException
- 如果对象的类不支?Cloneable
接口Q则重写 clone
Ҏ的子cM会抛出此异常Q以指示无法克隆某个实例?
Cloneable
UML把类之间的关pdZ?U?
?nbsp;兌Q类A与类B的实例之间存在特定的对应关系
?nbsp;依赖Q类A讉KcB提供的服?br />
?nbsp;聚集Q类A为整体类Q类B为局部类Q类A的对象由cB的对象组合而成
?nbsp;泛化Q类Al承cB
?nbsp;实现Q类A实现了B接口
兌QAssociationQ?/strong>
兌指的是类之间的特定对应关p,在UML中用带实U的头表示。按照类之间的数量对比,兌
可以分ؓ以下三种Q?br />
?nbsp;一对一兌
?nbsp;一对多兌
?nbsp;多对多关?br />
注意Q关联还要以分ؓ单向兌和双向关?/p>
依赖QDependencyQ?br />
依赖指的是类之间的调用关p,在UML中用带虚U的头表示。如果类A讉KcB的属性或者方法,
或者类A负责实例化类BQ那么可以说cA依赖cB。和兌关系不同Q无dcA中定义类Bcd的属性?/p>
聚集QAggregationQ?/strong>
聚集指的是整体与部分之间的关p,在UML中用带实U的菱Ş头表示?br />
聚集关系q可以分ZU类型:
?nbsp;被聚集的子系l允许被拆卸和替换,q是普通聚集关pR?br />
?nbsp;被聚集的子系l不允许被拆卸和替换Q这U聚集称为强聚集关系Q或者组成关pR?br />
注:集(l成Q可用带实线的实心菱形箭?/strong>表示?br />
泛化QGeneralizationQ?/strong>
泛化指的是类之间的承关p,在UML中用带实U的三角形箭?/strong>表示?br />
实现QRealizationQ?br />
实现指的是类与接口之间的关系Q在UML中用带虚U的三角形箭?/strong>表示?nbsp;
?nbsp; c?/strong>
?nbsp; ?/strong>
?nbsp; c?/strong>
不同的包