包含sefan.rujava的词条
JAVA 中强制执行一个类的方法
动态编译JAVA程序
对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和系统设计上的灵活性。本文给出了一个比较全面的介绍,值得参考。
在Sun JDK 1.2及后续版本中,包含了一组可在程序运行时刻编译和执行Java代码的API。这些API被包含在tools.jar类库中。这个功能允许Java程序在运行时动态编译、执行小的代码块,在有些情况下这个功能会让Java应用程序的架构更加灵活、开放。
本文假定读者已经在计算机中安装并配置好了Sun JDK 1.2或更高的版本,并对javac编译器命令有所了解。
在Java程序中使用编译器
假定要使用javac命令编译 /home/mytest目录下Test.java文件,并设定class文件存放在/home/mytest/classes路径下,输入下面命令:
javac -d /home/mytest/classes Test.java
达到同样的目的,也可以使用Sun提供的一个Java编译器的API来实现。它的使用也很简单,核心代码段如下:
…
String[] args = new String[] {“-d”, “/homemytestclasses”, “Test.java”};
Int status = javac.compile(args);
…
javac编译工具被安装在JDK根目录的/bin目录下,负责将源代码编译成运行于JVM的字节码。事实上,我们经常使用/bin目录下的javac编译工具来编译Java源文件。如果在Java程序中动态编译任意制定的Java语句,使用这个外部的javac编译器就显得不够灵活了。虽然有时可使用Runtime类来执行一个外部命令,但如果想知道代码是否被编译通过、编译时发生了什么错误,用Runtime类的exec()方法就很难实现了。
在Sun的JDK 1.2及后续版本中,JDK安装路径的/lib路径下包含了一个tools.jar文件,这个类库包含了一个完整的编译器包。com.sun.tools.javac.Main是编译器的主类入口,如果已经熟悉了javac编译器命令行的使用方法,很容易理解这个类的使用方法。方法compile(String[] p)执行编译动作,参数p是一个String数组,用来存放javac命令的参数选项,编译后的状态返回一个Int值,其对应值参考如下表所示:
表 状态参数与对应值
EXIT_OK 0
EXIT_ERROR 1
EXIT_CMDERR 2
EXIT_SYSERR 3
EXIT_ABNORMAL 4
在程序执行时编译和执行Java语句
从上面一段中,我们已经基本了解了动态编译一个Java文件的方法。那么,如何运行时动态编译指定的Java语句呢?这里需要一个技巧。
假设要动态编译的Java条语句如下:
System.out.println(“Hello,This runtime code!”);
编译器不支持编译单个Java语句,被编译的对象必须是一个以.java为后缀的、结构合法的类源程序文件,所以需要对这个语句进行改造,变成一个完整的类,并把这条语句置入main方法中,便于测试。
public class 临时类文件名 {
public static void main(String[] args) throws Exception {
System.out.println(“Hello,This runtime code!”);
}
}
这样,欲动态编译的代码已经被程序动态拼装成了上面那段代码,准备工作还没有结束,不过看起来工作在趋向稍微的复杂化。因为上述代码当前还存放在内存中,编译器似乎对一个硬盘文件更感兴趣。我们需要引用java.io.File类(JDK 1.2以上),创建一个临时的文件来存放上述代码的内容。java.io.File类的静态方法createTempFile()方法保证所创建的文件名是不重复的,这样会增大这段程序的灵活性。灵活性取决于真正应用到系统架构中的策略。
System.getProperty(“user.dir”)用来获得当前路径,在这里作为临时文件的存放目录。
File file;
file = File.createTempFile(“JavaRuntime”, “.java”, new File(System.getProperty(“user.dir”)));
String filename = file.getName();
String classname = getClassName(filename);
//将代码输出到文件
PrintWriter out = new PrintWriter(new FileOutputStream(file));
out.println(“public class” + classname + “ {”};
out.println(“..代码..”);
out.println(“}”);
//关闭文件流
out.flush();
out.close();
我们约定被创建的临时文件名以“JavaRuntime”为头缀(可任意命名),后缀名以“.java”结尾。一个待编译的Java源文件已被动态生成。下一步要从com.sun.tools.javac包中创建一个Main实例,调用javac.compile()方法编译这个临时文件:
Private static com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
String[] args = new String[] {“-d”, System.getProperty(“user.dir”),filename };
Int status = javac.compile(args);
假定临时文件通过了编译器文法验证等验证,编译成功(status值等于0,参看前表),在当前程序的运行目录下就会多了一个Java类文件。我们将通过执行这个Java 类文件,来模拟执行欲动态编译代码的结果。
Java提供在运行时刻加载类的特性,可动态识别和调用类构造方法、类字段和类方法。java.lang.reflect.Method实现了Member接口,可以调用接口的方法来获得方法类的名称、修饰词等。方法getRuturnType()、getParameterTypes()、getExeptionTypess()等返回被表示方法的构造信息。Method另一个重要的特性是可以调用invoke()执行这个方法(详细使用方法可以查看java.lang.reflect包文档)。下面这段代码中创建一个java.lang.reflect.Method类方法,调用getMethod()方法获得被拼装的main方法的映射,这段代码如下:
try {
// 访问这个类
Class cls = Class.forName(classname);
//调用main方法
Method main = cls.getMethod(“main”, new Class[] { String[].class });
main.invoke(null, new Object[] { new String[0] });
}catch (SecurityException se) {
debug(“access to the information is denied:” + se.toString());
}catch (NoSuchMethodException nme) {
debug(“a matching method is not found or if then name is or :
” + nme.toString());
}catch (InvocationTargetException ite) {
debug(“Exception in main: ” + ite.getTargetException());
}catch (Exception e){
debug(e.toString());
}
运行结果参如下:
Hello,This runtime code!
示范程序
下面给出了一个简单的Java程序,这个程序说明了如何利用Sun的javac编译器完成动态编译Java语句。运行该程序需要计算机安装JDK 1.2以上版本,并在classpath中或运行时指定tools.jar文件位置。
程序结构:
◆ compile() 编译Java代码,返回生成的临时文件;
◆ run()运行编译的class文件;
◆ debug()输出调试信息;
◆ getClassName()从一个Java源文件获得类名;
◆ readLine()从控制台读取用户输入的Java Code。
Import java.io.File;
…
Public class RuntimeCode{
/**编译器*/
private static com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
/**等待用户输入JavaCode,然后编译、执行*/
public static void main(String[] args) throws Exception{
…
run(compile(code));
}
/**编译JavaCode,返回临时文件对象*/
private synchronized static File compile(String code)
throws IOException,Exception {
File file;
//在用户当前文件目录创建一个临时代码文件
file = File.createTempFile(“JavaRuntime”, “.java”,
new File(System.getProperty(“user.dir”)));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename = file.getName();
String classname = getClassName(filename);
//将代码输出到文件
PrintWriter out = new PrintWriter(new FileOutputStream(file));
out.println(“/**”);
…
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args = new String[] {“-d”, System.getProperty(“user.dir”),filename };
//返回编译的状态代码
int status = javac.compile(args);
//处理编译状态
…
}
/**执行刚刚编译的类文件*/
private static synchronized void run(File file)
…
//当虚拟机退出时,删除此临时编译的类文件
new File(file.getParent(), classname + “.class”).deleteOnExit();
try {
// 访问这个类
Class cls = Class.forName(classname);
//映射main方法
Method main = cls.getMethod(“main”, new Class[] { String[].class });
//执行main方法
main.invoke(null, new Object[] { new String[0] });
}catch (SecurityException se) {
…
}
}
/**打印调试信息*/
private static void debug(String msg) {
System.err.println(msg);
}
/**根据一个java源文件名获得类名*/
private static String getClassName(String filename){
return filename.substring(0,filename.length()-5);
}
/**从控制台获得用户输入的Java代码段*/
…
}
编译运行上述代码,在please input java code提示下输入以下代码:
for(int i=0;i10;i++){System.out.println(“this is:”+i);}
运行结果如下所示:
Please input java code:
for(int i=0;i10;i++){System.out.println(“this is:”+i);}
wait….
——————–
this is:0
this is:1
this is:2
this is:3
this is:4
this is:5
this is:6
this is:7
this is:8
this is:9
总结
在大中型企业应用系统平台中,使用代码动态编译技术结合OO编程模型,可在系统不菪机条件下保证系统的可扩展性和伸缩性。如果你是一个Java程序员,稍加调整以上代码,还可以帮助调试小段的Java代码.
PESFan Editor 6.0.0如何使用啊?(怎么修改球员资料:姓名等)
PESFan Editor是Java平台的实况存档文件修改器,适用于PC版的PES4和WE8I的存档修改,目前只有英文版,它支持直接中文输入。下面以PESFan Editor 1.12为例对其最常用到的一些功能进行介绍。
一、软件的安装
PESFan Editor是用java编写的,它的运行需要Java SDK 1.5.0_xx以上本版的支持才能工作。笔者使用的是Java 2 SDK, Standard Edition Version 1.5.0,再网上很容易找到。它的安装也很简单,一路点“Next”即可,请大家自行下载安装。
这个是Java 2 SDK的官方下载地址:
当大家的系统中成功地安装了Java SDK后,PESFan Editor就能正常工作了。请大家把下载好的PESFan Editor解压缩到任意一个文件夹里。
直接双击“PESFan Editor 1.12.jar”文件,也可以双击run.bat文件或者run2.bat文件来启动PESFan Editor
软件启动后,我们可以在浏览框里找到我们保存存档文件的位置,选定要修改的存档文件,点“打开”,然后我们就可以对存档进行编辑了。
二、使用PESFan Editor对存档进行编辑
我们先来熟悉一下PESFan Editor的菜单。我们先打开一个存档,
“Open”和“Help”菜单里的几项我就不罗嗦了,这里说一下“Tools”下的这个“Make csv stats file”,这个功能是可以把存档里球员的资料导出成一个csv文件,这是一个可以用EXCEL打开的文件,但是这个功能目前并不完善,平时也基本用不到,大家知道就可以了。
我们先看“Transfer”选项卡,最左边是所有球员,向下拉紫色的滚动条可以看到这个存档文件里面所有的球员。
球员由上到下的排列顺序是:
(1)空白名字的球员
(2)剩余的ID,显示为xxxx,这里的xxxx为id号.一个存档文件里面球员id最多到4999,打个比方,如果你的存档里面有4950名球员,那么从4951到4999这些id就都是空的,就会在这里被显示出来;
(3)英文名第一个字母由A至Z
(4)中文名字的球员
这种方式是PESFan Editor默认的排列方式,叫做“Index Oder”。
PESFan Editor还有一种方式“Alpha Oder”,这种方式是以球员id从小到大来排列的。我们可以在“Transfer”的“All Players”的底部来切换这两种显示模式,我们点击“All Players”,探出的菜单里可以按照国籍来查找球员,最下面是自由国籍的球员和自由球员(不在俱乐部队中)。
“All Players”右边有两个球员的浏览框,这里我们可以按照游戏里的球队来检索队员,如国家队和经典球队,俱乐部,SHOP球员,自建球员,ML初始。这两个框是完全一样的。这两个框加上最左边的“All Players”,三个浏览框可以让我们把球员从一支球队转会到另一支队的时候很方便。具体的方法是:选好两边要转出和要转入的球队,点中球员(按住左键不放),拖入到转入的球队(松开左键)即可。
现在我们来看“Transfer”的右边这部分。
当我们选中一名球员时,它的相关资料就显示在右边的黑色区域。包括名字,国籍,年龄,惯用脚,身高,体重,场上位置和所属球队。我们可以点击黑色区域下面的“compare stats”来进行球员的数据比较。
我们可以在右上角修改队员的名字,球衣名,解说发音和号码。
球员名字可以直接输入中文或英文,输入后敲一下回车保存。球衣背名也是一样,改完后要敲一下回车。这两项同时修改的时候就要分别2下回车,这一点与EditPes4OptionFile不太一样,请大家注意。修改球员发音就直接从下拉菜单里面选取。
修改球员号码:
我们先找到要修改的队员,然后点它当前的号码,如图,我们点击冯潇霆的号码5,右边的白色方框内就显示当前号码,我们用鼠标点一下白色的区域,出现闪烁的光标,然后输入新号码,敲回车。
在“Transfer”中我们可以修改球员的数据。我们找到要修改的球员,鼠标左键双击球员名字,弹出球员数据编辑窗口。
这个界面的左边大部分是下拉菜单,修改球员的一些国籍、身高、体重等等,左下方修改球员的场上位置,首选位置。右边可以修改球员数据和特技。最后我们编辑完毕的时候要点左下角的“Accept”按钮保存数据。
在“Transfer”中还可以编辑球队的阵形,找到我们要修改的球队,在球队的名单上任意一处点击鼠标右键,弹出球队比编辑窗口。
最左边是球员名单,最上面11个人是首发队员,我们调整队员位置的方法与转会的操作类似:例如我们要把A球员调入首发,替换B球员。现点选A,鼠标左键按住不放,拖到上面B的位置的时候松开鼠标左键即可,这样非常方便。
紫色方块是队长和定位球设置:CL即左侧角球,CR即右侧角球,FL即远距离任意球,FS即近距离任意球,PK即点球,C为队长。修改任意球设定也是拖拽即可。
右上方可以选择阵形,“Snapshot”可以把当前的整形设置保存位一个png图片。修改队员场上位置的时候你可以直接用鼠标点中要修改的队员,您点中的队员这时就变为白色,然后拖到他您想要的位置即可。
这里可以在下面修改这名队员在您阵容中的位置,点击黑色向下的三角形,在探出的下拉菜单中选取。
右下方的一些设置就是大家在游戏里阵形设定里面看到的那些,如攻防等级、防守系统是平行站位还是自由人,还有造越位,区域压迫等等。最后调整完毕按“Accept”保存。
现在我们进入第二个选项卡“Team”:
这里我们可以修改队员的名字,球队简称,队旗、队徽、主场。修改队名的时候别忘了敲回车保存。
我们可以把自己的设置用“Export Kit”导出。“Import Kit”可以导入您之前备份的设置。比如我们把阿森纳队的设置导出,然后导入到另外的一支球队,那这支球队就变成阿森纳了。
“Flag/Emblem”和“Logo”两个选项卡一个是队旗的导入导出,一个是队徽的导入导出。导入导出的具体方法是一样的。例如,我们先来到“Flag/Emblem”,在一个空白的方格出点击鼠标左键,在弹出的对话框上选择“Import PNG/GIF”是导入,选择“Export PNG”是导出。
现在我们来到“Stadium”选项卡,这里我们可以修改各个球场的名字。我们先在Stadium Names中找到要修改的球场,鼠标左键单击,右边的空白处就会显示该球场当前的名称,我们就可以在这里删去这个名字,输入新球场名,然后回车保存。“League”选项卡是修改联赛名字,方法与“Stadium”一样。
“PES/Shop”选项卡中,我们可以修改PES资金,在空白处输入,回车即可。
下面Shop Items中我们可以选择“Lock”锁定存档,选择“Unlock”则为解锁存档。
“Stat Adjust”选项卡就是EditPES4OptionFile中的宏编辑器,可以同时修改很多队员的数据。可以增加或减少所有球员或者一些球员的数值。
最后我们来看看PESFan Editor的最后一个选项卡“Imoprt”:
这个Import指的是把一个存档的数据导入到另一个存档中。
例如,我现在打开一份中国风暴的中文存档,然后把中国风暴的英文存档的数据导入进我之前打开的中文存档中。
我们先打开中文存档,然后点击“Import”选项卡,这时我们看到一句话,提示我们打开导入数据的来源,在这里也就是我需要导进去的中国风暴的英文存档。我们点击坐上角的“File”,在弹出的菜单里选择“Open import file…”,在弹出的窗口里找到中国风暴的英文存档,然后点打开,这时,“Import”选项卡显示如下按钮:需要导入那些项目,我们点及相应的按钮即可。例如我要导入中国风暴众多的常规球员(非自建球员)名字,我就点击“Standard players(names only)”按钮即可。导入的时候球员名字是按照球员的id对应导入。在按下“Standard players(names only)”后,该按钮变为灰色,说明导入完成。现在我在打开“Transfer”选项卡,如图:球员名字已导入,中文球员名都变成英文球员名了。其他的各项导入方法也是一样,别忘了导入以后要点“File”菜单里的“Save”保存您的存档。
PESFan Editor这款修改器的使用大致就是这些,他家可以看到他的功能还是很强大的,希望大家能够用好这款工具。
你可以下下来看看
附:用PESFan Editor组建自己的球队征战ML联赛
简单说一下:把您当前的存档叫做存档1,你先备份一下这份存档,最后还要用。然后用修改器打开您当前的存档1,找您喜欢的俱乐部,把球队名字改成您自己喜欢的队名,比如“国际米兰”改为“蓝黑军团”等等,记得save存档。然后把您想要的球员转会到您的球队,常规球员,shop球员,元老,育成球员,自建球员都随您挑选,然后save这个存档为存档2。进去游戏,新开一个ML,就选您的球队,然后选球队原有球员,开始ML,把Ml联赛save一下,退出游戏。把存档2删掉,把您原先备份的存档1拷贝回来。这样您在进入游戏的时候Ml里是您自己的球队名字,其他的比赛,如联赛杯赛友谊赛,那个球队的队名数据也不会乱。队名修改以及转会参看上面的教程。祝您玩得开心!
初学者java中关于fanalize的问题?
1,你使用时要自己重写,可以不使用
2.这么说不对,finalize()是在gc之前运行的,但不确定保证运行,而且一个对象只能调用一次,当再次符合条件时也不会被调用,System.gc是请求GC,JVM会决定何时运行,你只能请求
3 当你觉得有什么东西是要在GC之前必须运行的时候可以重写finalize(),手动释放资源一类的
当对象没有引用指向他的时候就符合GC条件,但是你可以自己重写finalize()再次让它获得引用,这样它就避开了gc一次,就是我上面说的那种情况,之后gc的时候finalize()方法也不会再被调用了
java中try-catch-fanally的执行顺序
一段代码结束有两种方式,一种是正常结束,一种是异常退出。
对于方法method,他的异常没有被捕获。因此,运行到createException就跳出了。当然不会运行 println(‘d’)。
对于方法main,它的异常被处理了(虽然什么也没干,我们常见的说法叫“异常被吃掉了”) ,所以代码继续运行,就运行到’n’了。
用JAVA怎么做截屏工具?
哎~要是你给我个分就好了!我前几天刚刚做的!你拿去吧!
/*
作者:泡沫
地址:
功能:用于截取图片,方便快捷!
mail:yuhuidog#163.com (注意:其中#为@)
*/
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class AWTpicture extends Frame implements MouseListener,MouseMotionListener,ActionListener{
private int firstX,firstY,frameWidth,frameHeight;
private int firstWith,firstHeight,firstPointx,firstPointy;
private BufferedImage bi,sbi,original;
private Robot robot;
private Rectangle rectangle;
private Rectangle rectangleCursor,rectangleCursorUp,rectangleCursorDown,rectangleCursorLeft,rectangleCursorRight;
private Rectangle rectangleCursorRU,rectangleCursorRD,rectangleCursorLU,rectangleCursorLD;
private Image bis;
private Dimension dimension;
private Button button,button2,clearButton;
private Point[] point=new Point[3];
private int width,height;
private int nPoints=5;
private Panel panel;
private boolean drawHasFinish=false,change=false;
private int changeFirstPointX,changeFirstPointY,changeWidth,changeHeight;
private boolean changeUP=false,changeDOWN=false,changeLEFT=false,changeRIGHT=false,changeRU=false,changeRD=false,changeLU=false,changeLD=false;
private boolean clearPicture=false,redraw=false;
private FileDialog fileDialog;
private AWTpicture(){
//取得屏幕大小
dimension=Toolkit.getDefaultToolkit().getScreenSize();
frameWidth=dimension.width;
frameHeight=dimension.height;
fileDialog=new FileDialog(this,”泡沫截图”,FileDialog.SAVE);
rectangle=new Rectangle(frameWidth,frameHeight);
panel=new Panel();
button=new Button(“退出”);
button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
button.setBackground(Color.green);
button2=new Button(“截取”);
button2.setBackground(Color.darkGray);
button2.addActionListener(new MyTakePicture(this));
button2.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
button.addActionListener(this);
clearButton=new Button(“重绘”);
clearButton.setBackground(Color.green);
clearButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
clearButton.addActionListener(new MyClearPicture(this));
panel.setLayout(new BorderLayout());
panel.add(clearButton, BorderLayout.SOUTH);
panel.add(button, BorderLayout.NORTH);
panel.add(button2, BorderLayout.CENTER);
try {
robot=new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
//截取全屏
bi=robot.createScreenCapture(rectangle);
original=bi;
this.setSize(frameWidth,frameHeight);
this.setUndecorated(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.add(panel,BorderLayout.EAST);
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.setVisible(true);
this.repaint();
}
public static void main(String[] args){
new AWTpicture();
}
public void paint(Graphics g) {
this.drawR(g);
}
//缓存图片
public void update(Graphics g){
if(bis==null){
bis=this.createImage(frameWidth, frameHeight);
}
Graphics ga=bis.getGraphics();
Color c=ga.getColor();
ga.setColor(Color.black);
ga.fillRect(0, 0, frameWidth, frameHeight);
ga.setColor(c);
paint(ga);
g.drawImage(bis, 0, 0, frameWidth, frameHeight, null);
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
if(!drawHasFinish){
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[1].x;
firstPointy=point[1].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[2].x;
firstPointy=point[1].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[1].x;
firstPointy=point[2].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[2].x;
firstPointy=point[2].y;
}
changeFirstPointX=firstPointx;
changeFirstPointY=firstPointy;
if(point[1]!=null point[2]!=null ){
rectangleCursorUp=new Rectangle(firstPointx+20,firstPointy-10,width-40,20);
rectangleCursorDown=new Rectangle(firstPointx+20,firstPointy+height-10,width-40,20);
rectangleCursorLeft=new Rectangle(firstPointx-10,firstPointy+10,20,height-20);
rectangleCursorRight=new Rectangle(firstPointx+width-10,firstPointy+10,20,height-20);
rectangleCursorLU=new Rectangle(firstPointx-10,firstPointy-10,30,20);
rectangleCursorLD=new Rectangle(firstPointx-10,firstPointy+height-10,30,20);
rectangleCursorRU=new Rectangle(firstPointx+width-10,firstPointy-10,20,20);
rectangleCursorRD=new Rectangle(firstPointx+width-10,firstPointy+height-10,20,20);
drawHasFinish=true;
}
}
//确定每边能改变大小的矩形
if(drawHasFinish){
rectangleCursorUp=new Rectangle(changeFirstPointX+20,changeFirstPointY-10,changeWidth-40,20);
rectangleCursorDown=new Rectangle(changeFirstPointX+20,changeFirstPointY+changeHeight-10,changeWidth-40,20);
rectangleCursorLeft=new Rectangle(changeFirstPointX-10,changeFirstPointY+10,20,changeHeight-20);
rectangleCursorRight=new Rectangle(changeFirstPointX+changeWidth-10,changeFirstPointY+10,20,changeHeight-20);
rectangleCursorLU=new Rectangle(changeFirstPointX-2,changeFirstPointY-2,10,10);
rectangleCursorLD=new Rectangle(changeFirstPointX-2,changeFirstPointY+changeHeight-2,10,10);
rectangleCursorRU=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY-2,10,10);
rectangleCursorRD=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2,10,10);
}
}
public void mouseDragged(MouseEvent e) {
point[2]=e.getPoint();
//if(!drawHasFinish){
this.repaint();
// }
//托动鼠标移动大小
if(change){
if(changeUP){
changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;
changeFirstPointY=e.getPoint().y;
}
if(changeDOWN){
changeHeight=e.getPoint().y-changeFirstPointY;
}
if(changeLEFT){
changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;
changeFirstPointX=e.getPoint().x;
}
if(changeRIGHT){
changeWidth=e.getPoint().x-changeFirstPointX;
}
if(changeLU){
changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;
changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;
changeFirstPointX=e.getPoint().x;
changeFirstPointY=e.getPoint().y;
}
if(changeLD){
changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;
changeHeight=e.getPoint().y-changeFirstPointY;
changeFirstPointX=e.getPoint().x;
}
if(changeRU){
changeWidth=e.getPoint().x-changeFirstPointX;
changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;
changeFirstPointY=e.getPoint().y;
}
if(changeRD){
changeWidth=e.getPoint().x-changeFirstPointX;
changeHeight=e.getPoint().y-changeFirstPointY;
}
this.repaint();
}
}
public void mouseMoved(MouseEvent e) {
point[1]=e.getPoint();
//改变鼠标的形状
if(rectangleCursorUp!=null rectangleCursorUp.contains(point[1])){
this.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
change=true;
changeUP=true;
}else if(rectangleCursorDown!=null rectangleCursorDown.contains(point[1])){
this.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
change=true;
changeDOWN=true;
}else if(rectangleCursorLeft!=null rectangleCursorLeft.contains(point[1])){
this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
change=true;
changeLEFT=true;
}else if(rectangleCursorRight!=null rectangleCursorRight.contains(point[1]) ){
this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
change=true;
changeRIGHT=true;
}else if(rectangleCursorLU !=null rectangleCursorLU.contains(point[1])){
this.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));
change=true;
changeLU=true;
}else if(rectangleCursorLD !=null rectangleCursorLD.contains(point[1])){
this.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));
change=true;
changeLD=true;
}else if(rectangleCursorRU!=null rectangleCursorRU.contains(point[1])){
this.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));
change=true;
changeRU=true;
}else if(rectangleCursorRD!=null rectangleCursorRD.contains(point[1])){
this.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));
change=true;
changeRD=true;
}else{
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
changeUP=false;changeDOWN=false;changeRIGHT=false;changeLEFT=false;changeRU=false;
changeRD=false;changeLU=false;changeLD=false;
}
redraw=false;
}
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
class MyTakePicture implements ActionListener{
AWTpicture aWTpicture;
MyTakePicture(AWTpicture aWTpicture){
this.aWTpicture=aWTpicture;
}
//保存图片
public void actionPerformed(ActionEvent e) {
fileDialog.setVisible(true);
if(changeWidth0){
sbi=bi.getSubimage(changeFirstPointX,changeFirstPointY,changeWidth,changeHeight);
File file=new File(fileDialog.getDirectory());
file.mkdir();
try {
ImageIO.write(sbi, “jpeg”,new File(file,fileDialog.getFile()+”.jpg”) );
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
class MyClearPicture implements ActionListener{
AWTpicture aWTpicture;
MyClearPicture(AWTpicture aWTpicture){
this.aWTpicture=aWTpicture;
}
public void actionPerformed(ActionEvent e) {
drawHasFinish=false;
change=false;
redraw=true;
rectangleCursorUp=null;
rectangleCursorDown=null;
rectangleCursorLeft=null;
rectangleCursorRight=null;
rectangleCursorRU=null;
rectangleCursorRD=null;
rectangleCursorLU=null;
rectangleCursorLD=null;
changeWidth=0;
changeHeight=0;
aWTpicture.repaint();
}
}
public void drawR(Graphics g){
g.drawImage(bi, 0,0,frameWidth,frameHeight, null);
if(point[1]!=null point[2]!=null !drawHasFinish !redraw){
int[] xPoints={point[1].x,point[2].x,point[2].x,point[1].x,point[1].x};
int[] yPoints={point[1].y,point[1].y,point[2].y,point[2].y,point[1].y};
width=(point[2].x-point[1].x)0?(point[2].x-point[1].x):(point[1].x-point[2].x);
height=(point[2].y-point[1].y)0?(point[2].y-point[1].y):(point[1].y-point[2].y);
changeWidth=width;
changeHeight=height;
Color c=g.getColor();
g.setColor(Color.red);
g.drawString(width+”*”+height, point[1].x, point[1].y-5);
//画点
/*int i;
if()*/
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[1].x;
firstPointy=point[1].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[2].x;
firstPointy=point[1].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[1].x;
firstPointy=point[2].y;
}
if(point[1].xpoint[2].x point[1].ypoint[2].y){
firstPointx=point[2].x;
firstPointy=point[2].y;
}
g.fillRect(firstPointx-2,firstPointy-2 , 5,5);
g.fillRect(firstPointx+(width)/2,firstPointy-2 , 5,5);
g.fillRect(firstPointx+width-2,firstPointy-2 , 5,5);
g.fillRect(firstPointx+width-2,firstPointy+ height/2-2, 5,5);
g.fillRect(firstPointx+width-2,firstPointy+height-2, 5,5);
g.fillRect(firstPointx+(width)/2,firstPointy+height-2, 5,5);
g.fillRect(firstPointx-2,firstPointy+height-2, 5,5);
g.fillRect(firstPointx-2,firstPointy+ height/2-2, 5,5);
//画矩形
//g.drawString(“fafda”, point[1].x-100, point[1].y-5);
g.drawPolyline(xPoints, yPoints, nPoints);
}
if(change){
g.setColor(Color.red);
g.drawString(changeWidth+”*”+changeHeight, changeFirstPointX, changeFirstPointY-5);
g.fillRect(changeFirstPointX-2,changeFirstPointY-2 , 5,5);
g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY-2 , 5,5);
g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY-2 , 5,5);
g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+ changeHeight/2-2, 5,5);
g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2, 5,5);
g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY+changeHeight-2, 5,5);
g.fillRect(changeFirstPointX-2,changeFirstPointY+changeHeight-2, 5,5);
g.fillRect(changeFirstPointX-2,changeFirstPointY+ changeHeight/2-2, 5,5);
g.drawRect(changeFirstPointX, changeFirstPointY, changeWidth, changeHeight);
}
}
}
java 判断字符串是不是网址
public static boolean isTopURL(String str){
//转换为小写
str = str.toLowerCase();
String domainRules = “com.cn|net.cn|org.cn|gov.cn|com.hk|公司|中国|网络|com|net|org|int|edu|gov|mil|arpa|Asia|biz|info|name|pro|coop|aero|museum|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cf|cg|ch|ci|ck|cl|cm|cn|co|cq|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|es|et|ev|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gp|gr|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|ml|mm|mn|mo|mp|mq|mr|ms|mt|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|va|vc|ve|vg|vn|vu|wf|ws|ye|yu|za|zm|zr|zw”;
String regex = “^((https|http|ftp|rtsp|mms)?://)”
+ “?(([0-9a-z_!~*'().=+$%-]+: )?[0-9a-z_!~*'().=+$%-]+@)?” //ftp的user@
+ “(([0-9]{1,3}\.){3}[0-9]{1,3}” // IP形式的URL- 199.194.52.184
+ “|” // 允许IP和DOMAIN(域名)
+ “(([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]+\.)?” // 域名-
+ “([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.” // 二级域名
+ “(“+domainRules+”))” // first level domain- .com or .museum
+ “(:[0-9]{1,4})?” // 端口- :80
+ “((/?)|” // a slash isn’t required if there is no file name
+ “(/[0-9a-z_!~*'().;?:@=+$,%#-]+)+/?)$”;
Pattern pattern = Pattern.compile(regex);
Matcher isUrl = pattern.matcher(str);
return isUrl.matches();
}
以上【 包含sefan.rujava的词条 】是嗨壳技术分享网(www.heikehao.com)编辑整理。嗨壳技术分享网包含技术投稿、C语言、Excel、Java、Linux、网络安全和账号安全等丰富的栏目,并分享一些互联网安全技术知识和安全防护经验,帮助网友注重网络安全,让网络安全不再是问题。
原创文章,作者:java,如若转载,请注明出处:https://www.heikehao.com/11056.html