java该怎么做笔记_JAVA学习笔记

1.java.lang.NumberFormatException:有两种情况错误,第一就是数据类型转换错误。第二有空能 是没有传进参数,或者传进空参数。例如案例,本人的解决方法。

if(str1.equals("")||str1.equals("")){

//返回错误信息

}else{

traffic=Long.parseLong(str1.trim())+Long.parseLong(str2.trim());

}

2.abstract class 抽象类和接口的区别:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。至于他们在各个语言中的句法,语言细节并不是我关心的重点。

3.Timer实现的调度任务TimeTask要独占处理器,处理完该线程了,才会处理下一个线程。所以要实现多线程的定时,要在单个线程里面实现Time才不会使该线程霸占处理器。

4.多线程并行运行的实现方式可以继承Runnable接口,在创建多线程把实例传递进去。线程的优先级高并不一定就先执行,只是先执行的概率高。

5.线程同步问题。用synchronized(syncObject) { //允许访问控制的代码 }

1.添加菜单栏是用jFRAME.setJMENUBar()方法。

5常见异常:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 没有打包也会产生,或打包错误。

This method has a constructor name。该方法有同名构造函数,如果要改成构造函数则去掉返回类型。

The serializable class XXX does not declare a static final serialVersionUID field of type long

可序列化的类 CreateBPOVIEW 未声明类型为 long 的静态终态 serialVersionUID 字

serialVersionUID作用:

序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。

6.DecimalForma格式化小数位几位。DecimalFormat df = new DecimalFormat("#.00");

system.currentMills返回当前时间的毫秒数 new date 亦是返回毫秒数,需要除以1000方为秒。

7.在出现异常的地方,就终止执行代码,然后进入到catch,如果有多个catch则进入匹配的那个catch。finally有异常的话此块总执行。throws是给调用者处理。

8.了解awt.swt.swing.jface之间的一些关系。JFrame.setDefultCloseOperation()默认关闭JAVAW。JButton按钮

9.布局管理器,Borderlayout.flowlayout.cardlayout.GridLayOut布局面板JPanel

10.创建窗口基本过程 :1.定义组件 2.创建组件new 3.添加组件,设置布局 4.设置窗体属性 5显示窗体

11.JText JLable JPassword ButtonGroup JRadioButton JCheckBox JcomboBox(Strign []) JList(Strign []) JList.setVisibleRowNum JScrollPanel (Jlist) 拆分组件 JSplitPanel ImageIcon ("路径").getImage

TextArea 和TextField JTabbedPane 选项卡窗格。Lable.setFont Lable .setForeColor

JMenuBar  JMenu 菜单 树干  JMenuItem

JToolBar JButton

12.JAVA绘图技术

pulbic void pain(Graphics g)

Graphics 画笔类

画直线       g.drawLine

画矩形边框     g.drawRect

画椭圆边框     g.drawOval

填充矩形      g.fillRect

填充椭圆

画图片       Image im =ToolKit.getdefaultToolKit().getImage

g.drawImage();

画字符串      g.drawString

设置画笔的字体

设置画笔的颜色

13.super

1。表示调用父类的构造函数。也是一个特殊语法,不是变量,没有什么类型。

2。可以在一个类的非static成员内部使用。比如super.method()。

3。super的另外一个作用是调用父类的protected函数。只有通过"super"这个魔咒,我们才能操作父类的protected成员,别无它法。

14.事件源 事件 事件监听器对应实现  //注意,注册监听是在Jframe中的。

键盘事件:KeyEvent KeyListener

鼠标事件:MouseEven

鼠标监听:MouseMotionEvent

窗口事件:WindowEvent

别忘了,this.repain();!!!!

实现两个按键同时响应的方法,设置一个Boolean变量,来存按键的响应。尔后通过变量来操作判断。

14.ArrayList和Vector的区别是线程安全问题。vector是i线程安全的。

15.晕了,这个问题一定要注意了,这么小的问题让我排除了这么久。isLive=true和isLive==true的区别一个是赋值,一个是判断!!!!

16.Null pointer access: The variable point can only be null at this location

Point变量定义后必须初始化,否则会报此错。

17.播放声音类

public class PlayTest {

/** * @param args */ public static void main(String[] args) {

try {

AudioInputStream ais = AudioSystem.getAudioInputStream(new File("intel.wav"));// 获得音频输入流

AudioFormat baseFormat = ais.getFormat();// 指定声音流中特定数据安排

System.out.println("baseFormat="+baseFormat);

DataLine.Info info = new DataLine.Info(SourceDataLine.class,baseFormat);

System.out.println("info="+info);

SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

// 从混频器获得源数据行

System.out.println("line="+line);

line.open(baseFormat);// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。

line.start();// 允许数据行执行数据 I/O

int BUFFER_SIZE = 4000 * 4;

int intBytes = 0;

byte[] audioData = new byte[BUFFER_SIZE];

while (intBytes != -1) {

intBytes = ais.read(audioData, 0, BUFFER_SIZE);// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。

if (intBytes >= 0) { int outBytes = line.write(audioData, 0, intBytes);// 通过此源数据行将音频数据写入混频器。

} }  } catch (Exception e) {  } } } }

18.jpanel中画图像的一种方法

p_w_picpathIcon = new ImageIcon("main.png"); //写入文件路径

p_w_picpathLabel = new JLabel(p_w_picpathIcon);     //初始化JLabel

jpanel = new JPanel();

this.add(BorderLayout.NORTH,jpanel);

this.setVisible(true); //设置为显示

19.关于GridBanLayOut布局的理解,很复杂呀。

现在,提供本人对这些属性的理解:

1,  gridx: 表示组件的左边缘与网格左部之间的距离,如果学过HTML的话,那么gridx就 相当于HTML 里面的leftmargin属性。

2,  gridy:  表示组件的上边缘与网格顶部之间的距离,相当于HTML里面的topmargin属性!

3,  ipadx:  表示组件在默认的大小上,往水平方向上再加上多少像素的大小!

4,  ipady:  表示组件在默认的大小上,往垂直方向上再加上多少像素的大小!

5,   fill:  当组件没有空间大时。它可以确定是否填充空间!

6,  anchor:  当组件没有空间大时。它可以确定在显示区域中放置组件的位置!

7, insets:  设置组件之间彼此的间距,它有四个参数,分别是上,左,下,右,

默认值为(0,0,0,0)

8,weightx:  用来设置当窗口变大时,各组件沿水平方向跟着变大的比例,数字越大,表示组件能得到的空间越大

9,weighty:  用来设置当窗口变大时,各组件沿垂直方向跟着变大的比例,数字越大,表示组件能得         到的空间越大

10,gridwidth  用来设置组件所占的单位长度,默认值为1。

11,gridheight 用来设置组件所占的单位高度,默认值为1。

对gridwidth与gridheight做了修改后,必须记得要对fill属性做相应的修改,否则组件所显示的大小   还是原来的大小。

12,要单独调整组件的大小,就要setLayOut(null);

记得设置首选大小,setPreferSize();,不然布局时会显示不出来。

13.设置Lable的字体可以用这 是 下 划 线");>

14.关于引包的学习

把要引用的包放到如下目录

C:\Program Files\Java\jre6\lib\ext

用import javax.mail(比如是这个包).*

如果有一下报错的话:

报错信息:Access restriction: The type TaskTopicResolver is not accessible due to restriction on required library NC_DEMO/NC_HOME/modules/uap/META-INF/lib/uapplatform.jar

解决方案1:

Eclipse 默认把这些受访问限制的API设成了ERROR。

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->

Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

解决方案2:

只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

解决方案3:

工程上右键->工程属性->java builder path->Libraries标签,点击JRE System Library里面的Access rules,add sun/** 为accessible,如果该项存在,就edit。

解决方案4:

Windows -> Preferences -> Java -> Installed JREs -> 选择用的JDK -> Edit -> Add External JARs

15.注意jtextfield和jpassword的取值问题

1.注意要监听,监听更改,插入,删除

2.取值时密码要用 string.valueof(jpasswordfield.getpassword())

jPasswordField.getDocument().addDocumentListener(new javax.swing.event.DocumentListener(){

public void changedUpdate(DocumentEvent e) {//这是更改操作的处理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

public void insertUpdate(DocumentEvent e) {//这是插入操作的处理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

public void removeUpdate(DocumentEvent e) {//这是删除操作的处理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

}

);

16.键盘事件要注意的事件

1,有哪些组件可以监听,如jtextfield ,jpanel ,jframe ,jpassword 等等,是有可以获得焦点的组件

2.注意只有获得焦点的组件在监听,就是说在某个时刻只有一个组件可以监听

3.几种方法实现,keylistener,keyadapter,.

17.关于坐标系

getx()是取回该组件原点与父组件所对应的距离

getscreenx()是取回屏幕的x坐标值。

18.导入插件类库的方法

右键点击项目 -> Build Path -> Config Build Path...

然后选择Libraries标签页,点击Add External JARs...

再到你的eclipse安装目录下的plugins目录下寻找 org.eclipse.swt.win32.win32.x86_XXXXX.jar(XXXXX是版本号)。

二、安装

1、将下载的swt-3.2-win32-win32-x86.zip解压,其中会包含几个文件有一个src.zip和swt.jar等奖swt.jar解压缩后得到以下文件,其中有4个dll文件, swt-awt-win32-3232.dll , swt-gdip-win32-3232.dll ,

swt-wgl-win32-3232.dll和swt-win32-3232.dll。

这四个文件就是SWT的原生库文件。原生库文件为SWT 通过JNI 访问windows 本地API 提供了接口,为使Java 程序在启动时能够访问这些文件,可以通过以下方法进行设置:

方法一:将这四个DLL文件复制到jre的bin目录下。

方法二:设置环境变量,在PATH 中加入这几个dll文件所在的目录。

方法三:在eclipse的Java 项目中导入原生库文件。操作方法是:

在eclipse 的包资源管理器中,右单击项目名→导入→常规→文件系统→下一步→浏览

→选择DLL文件所在目录→确定→勾选DLL文件→完成。

我用了方法三可以。用方法一时出现异常,方法二没试。

2、eclipse的Java项目中配置构建路径,添加外部JAR,

将文件swt.jar 加入到项目中,操作方法是:

在eclipse的包资源管理器中,右单击项目名→构建路径→配置构建路径→库(L)→添

加外部JAR→在eclipse的plugins 文件夹中找到该jar 文件→打开→确定。

19读取GIF图片要用p_w_picpath=new p_w_picpathicon().getp_w_picpath();然后放到pannel上,再用线程不断repaint即可,呵呵。

20.设置窗口状态位:

public void setExtendedState(int state)

21.queue是一个接口,要使用的话,可以new linkedlist();来初始化。

22.查找电脑硬盘文件的代码:

package com.qq.client;

import java.io.File;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Queue;

/**

* 实现一个支持通配符的基于广度优先算法的文件查找器

*/

public class FileFinder {

/**

* 查找文件。

* @param baseDirName    待查找的目录

* @param targetFileName  目标文件名,支持通配符形式

* @param count        期望结果数目,如果畏0,则表示查找全部。

* @return    满足查询条件的文件名列表

*/

public static List findFiles(String baseDirName, String targetFileName, int count) {

/**

* 算法简述:

* 从某个给定的需查找的文件夹出发,搜索该文件夹的所有子文件夹及文件,

* 若为文件,则进行匹配,匹配成功则加入结果集,若为子文件夹,则进队列。

* 队列不空,重复上述操作,队列为空,程序结束,返回结果。

*/

List fileList = new ArrayList();

//判断目录是否存在

File baseDir = new File(baseDirName);

if (!baseDir.exists() || !baseDir.isDirectory()){

System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");

return fileList;

}

String tempName = null;

//创建一个队列,Queue在第四章有定义

Queue queue = new LinkedList() ;//实例化队列

queue.add(baseDir);//入队

File tempFile = null;

while (!queue.isEmpty()) {

//从队列中取目录

tempFile = (File) queue.poll();

if (tempFile.exists() && tempFile.isDirectory()) {

File[] files = tempFile.listFiles();

for (int i = 0; i < files.length; i++) {

//如果是目录则放进队列

if (files[i].isDirectory()) {

queue.add(files[i]);

} else {

//如果是文件则根据文件名与目标文件名进行匹配

tempName = files[i].getName();

if (FileFinder.wildcardMatch(targetFileName, tempName)) {

//匹配成功,将文件名添加到结果集

fileList.add(files[i].getAbsoluteFile());

//如果已经达到指定的数目,则退出循环

if ((count != 0) && (fileList.size() >= count)) {

return fileList;

}

}

}

}

}

}

return fileList;

}

/**

* 通配符匹配

* @param pattern  通配符模式

* @param str  待匹配的字符串

* @return  匹配成功则返回true,否则返回false

*/

private static boolean wildcardMatch(String pattern, String str) {

int patternLength = pattern.length();

int strLength = str.length();

int strIndex = 0;

char ch;

for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {

ch = pattern.charAt(patternIndex);

if (ch == '*') {

//通配符星号*表示可以匹配任意多个字符

while (strIndex < strLength) {

if (wildcardMatch(pattern.substring(patternIndex + 1),

str.substring(strIndex))) {

return true;

}

strIndex++;

}

} else if (ch == '?') {

//通配符问号?表示匹配任意一个字符

strIndex++;

if (strIndex > strLength) {

//表示str中已经没有字符匹配?了。

return false;

}

} else {

if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {

return false;

}

strIndex++;

}

}

return (strIndex == strLength);

}

public static void main(String[] paramert) {

//  在此目录中找文件

String baseDIR = "E:";

//  找扩展名为txt的文件

String fileName = "QQ.*";

//  最多返回5个文件

int countNumber = 0;

List resultList = FileFinder.findFiles(baseDIR, fileName, countNumber);

if (resultList.size() == 0) {

System.out.println("No File Fount.");

} else {

for (int i = 0; i < resultList.size(); i++) {

System.out.println(resultList.get(i));//显示查找结果。

}

}

}

}

该方法竟然没考虑到空目录的情况,Source Not Find!!这个问题竟然让我找了一天才解决,晕倒啊!!!还有,Source Not Find!这个问题并不一定是找不到源文件,调试器老是提醒这个问题,不知怎么搞的,我的竟然不报空指针了,其实这是个空指针的问题,百度半天也没解决,看来很多情况都会报这个错误呀,一定要多多考虑可能发生问题的情况,不然找死也找不出问题来!!

22.关于执行文件的问题

ce.exec( )函数的参数是一个字符串,这个函数把这个字符串当成一个命令行,然后执行这个命令行

ce.exec("javac dierge.java"); //执行javac dierge.java,编译dierge.java文件按

ce.exec("java dierge"); //执行java dierge,执行这个java程序

File file1=new File("C:/windows","Notepad.exe"); //获取相应目下的文件指针

ce.exec(file1.getAbsolutePath()); //getAbsolutePaht()函数返回file1的绝对路径,包括文件名,然后exec执行这个绝对路径

Desktop.getDesktop().open(resultList.get(i));这个是java虚拟机执行,会因为目录问题而执行不了。

23.弹出对话框的几种方式

1.显示一个错误对话框,该对话框显示的 message 为 'alert':

JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);

2.显示一个内部信息对话框,其 message 为 'information':

JOptionPane.showInternalMessageDialog(frame, "information","information", JOptionPane.INFORMATION_MESSAGE);

3.显示一个信息面板,其 options 为 "yes/no",message 为 'choose one':

JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);

4.显示一个内部信息对话框,其 options 为 "yes/no/cancel",message 为 'please choose one',并具有 title 信息:

JOptionPane.showInternalConfirmDialog(frame,

"please choose one", "information",

JOptionPane.YES_NO_CANCEL_OPTION,

JOptionPane.INFORMATION_MESSAGE);

5.显示一个警告对话框,其 options 为 OK、CANCEL,title 为 'Warning',message 为 'Click OK to continue':

Object[] options = { "OK", "CANCEL" };

JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",

JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,

null, options, options[0]);

6.显示一个要求用户键入 String 的对话框:

String inputValue = JOptionPane.showInputDialog("Please input a value");

7.显示一个要求用户选择 String 的对话框:

Object[] possibleValues = { "First", "Second", "Third" };

Object selectedValue = JOptionPane.showInputDialog(null, "Choose one", "Input",

JOptionPane.INFORMATION_MESSAGE, null,

possibleValues, possibleValues[0]);

100:切记!!!切记!!

组件变了属性以后一定要重绘,而且用paitImmediately()进行立即重绘,才可以显示出想要的效果!!!!!

101.又学到了一招,如果不要影响界面的响应,如果有大量的计算要做的话,要另起一个线程去执行,注意线程之间必须是可以独立的,不要让一个线程去等另外一个线程的结果,很可能结果还没计算出来,你就运行了要用的结果,会出现意外。

111。在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,错误摘录如下:

Resource is out of sync with the file system......

分析:

有时候因为时间紧迫的原因,所以就没去管它,今天再次遇到它,实在看着不爽,所以想了办法解决此问题!

这个问题是由于eclipse中文件不同步引起的。在eclipse中,工程文件是由eclipse自动扫描添加的,如果在外部修改了工程目录中的文件但又关闭了自动刷新功能,则会引起文件不同步,从而搜索时出现Resource is out of sync with the file system问题(其它功能可能也会如此)。此外,在外部没有修改eclipse工程中的文件也有可能引起该问题。

解决方法:

有两种解决方法:

1)手动刷新。即在eclipse的工程目录中,右键refresh(或者按下F5)。

2)配置eclipse的选项:

a)eclipse启动时,刷新workspace,即勾选:window—>preferences—>general—>startup and shutdown—>refresh workspace on startup;

b)window—>preferences—>general—>workspace中:勾选选项:refresh using native hooks or polling和refresh on access;

112.打包jar要注意的问题,

1,注意生成MAINFEST-EF文件,主要是描述你的主函数在哪个类

2,打包后,图片不显示的解决方法:

出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法:

一、通过使用外部资源文件的方式解决

把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIcon p_w_picpath=new ImageIcon(SwingResourceManager.getImage("p_w_picpathfilePath"));就可以了。

这种方式下,图片文件与类文件不是一块放在包中的,类文件在包中,而图片文件在项目根目录下。

二、通过使用内部资源文件的方式解决

把所用的图片文件放在项目使用的包中,打包时把图片文件同时打进Jar文件中。这种方式在具体代码中应使用下面其中一种:

1.ImageIcon p_w_picpath = new ImageIcon(this.getClass().getResource("p_w_picpathfilePath"));

2.ImageIcon p_w_picpath = new ImageIcon(main.class.getResource("p_w_picpathfilePath"));

3.ImageIcon = SwingResourceManager.getImage(main.class,"p_w_picpathfilePath");

4.3.ImageIcon = SwingResourceManager.getImage(this.getClass(),"p_w_picpathfilePath");

3和4中第一个参数代表图片文件路径的参照对象,不能少,否则不能正确获得图片资源。

最后,朋友们一定要注意大小写的问题,在项目中文件名的大小写没有影响,但是打包后,就必须注意文件名大小写问题了,否则也是不行的。

1.关于runtime

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

应用程序不能创建自己的 Runtime 类实例。

1.bat运行QQ时出错的问题://找不到图片资源

在WIN7中要用管理员命令运行

在bat命令中要用当前路径如:%~dp0/jre6/bin/javaw -jar QQ.jar

2.里面用到的图片和声音文件,一定要用取基类路径的方法去找,不然导出jar以后很容易找不到图片和资源。

3.关于getclass.getresource()的取目录问题

System.out.println(this.getClass().getResource(""));//返回当前类的包目录下

System.out.println(this.getClass().getResource("."));

System.out.println(this.getClass().getResource(".."));

System.out.println(this.getClass().getResource("/"));//返回src同级目录

4.取当前时间

Clander c=new grerogianclander();

c.get(int);具体看APi.

5.做qq时,最后BAT运行是,竟然会有权限的问题,主要是软件搜素了C盘,后面不搜索C盘问题就解决了。

更多资讯请点击:华万微信图文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值