关于javajump框架的信息

博主:adminadmin 2023-01-03 19:42:05 1036

本篇文章给大家谈谈javajump框架,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

后缀.java.jump是什么意思?

一个一个按你的步骤给你说:

1,java可以编写成.exe,虽然是exe文件,但是不代表是windows可执行文件,尽管扩展名一样

2,可以打包成jar,需要有jdk支持,通过JVM运行,这个才是java真正的运行包。

3,.java是java程序的源代码文件

4,.class不是类的扩展名,JVM并不能直接运行java源文件,需要通过javac将java源文件编译成字节码文件,也就是.class文件,JVM在运行某个类的时候,通过加载指定该.class文件就可以,因为class文件名与类名相同,但是不能理解他俩是一回事,运行的是类,不是文件。

jar转换成exe的过程其实是没有必要的,因为要运行java程序必须有JVM,它所转换的exe和C++写出来程序的exe有区别的。不是同一个扩展名文件里面东西就一样。好比cmd里是可执行文件,但是C#编写出来的exe是微软中间码。

交通银行jump框架怎么样

好。交行531系统该项目主要使用的框架是jump+spingmvc+mybatis+flex+db2,交通银行jump框架很好,使用了大型服务器websphere,中间件分别使用了redis和webspheremq,同时使用了junit单元测试和loadrunner自动化测试等测试工具。

这个java程序怎么写?

一个最简单的方法,当你frame1.直接可以调用frame2的show方法()

还有就是,无论你怎么写的程序,但每个程序里总有一个main方法。

我想就算你不调用frame2的show方法,也可以在main方法中控制...

不知道我说的你明白没有,由于今天的机器里没有JBuilder也没有java环境在也就没写代码.......

假设这样一种情况,我们的系统的界面使用javax.swing包构建,界面的基础是BaseView,他是一个容器,当然他应当提供获取控件元素的功能,比如得到按钮,下拉框,表格等,当然仅仅是一个容器而已,而我们的界面的元素全部部署在JPanel上。

描述为:

一个界面就是一个BaseView,他只包含一个JPanel,这个包含JPanel包含所有我们的Swing控件,例如JButton,JLable等等。

问题出现了:我们通常因为业务的需要完成一个界面的操作要自动跳转到下一个界面,完成下一个界面又能跳回来(题外话:由于我们的操作是基于GUI的,所以往往能保存Session信息,而Web却做不到),而这往往成为系统实现过程中效率低下的一个因素,我就见到我现在的系统中有人用600行代码判断上一个界面应该是哪一个来跳转过来,因为很多界面都可以跳到当前界面。

当然有一种做法是,在下一个界面类中包含指向上一个界面的变量,我们说,这不方便,也增加了依赖性,这对软件是不利的。

接下来,我给出我的解决方法,希望对采用这种界面结构的朋友有所裨益。

(以下全部用简化模型来讲述.)

1.简单点,我们假设BaseView继承JWindow,当然可以是别的容器(依据你的实现),大概象这样:

public abstract class BaseView extends JWindow{

...

(实现一些取得界面控件,和界面信息的方法).

}

2.每个界面类都象这样定义:

public class MyView extends BaseView{

JPanel myPanel;

public void playoutPanel(){

JButton myButton = new JButton("OK");

myPanel.add(myButton);

......

(添加你需要的控件和布局到myPanel上)

}

}

3.假设有其他的界面OneView,TwoView,ThreeView处理完操作后都需要跳转到myView,在myView中的ok按钮按下的时候需要回到原始界面。

原来臃肿的代码需要在myView中添加一个变量BaseView anyView;用来存放转来的那个界面anyView,赋值在三者中的跳转代码中引用myView来设定.跳转代码象这样:

public void jump(){

MyView myView = new MyView();

myView.anyView = this;

this.remove(this.xxPanel);

this.add(myView.getPanel());

this.repaint();

}

看起来还不错,虽然需要引用MyView类,并调用他的变量和方法.但是跳转回来却不那么容易,否则怎么会用600行!

大概象这样:(这已经是被我简化的)

public void goBack(){

if(anyView instanceof OneView){

anyView.remove(this.myView);

OneView ov = (OneView)anyView;

anyView.add(ov.getPanel());

anyView.repaint();

}

if(anyView instanceof TwoView){

....

}

...

}

不经大量应用别的业务用例界面,这种编译依赖性真不是什么好事,更何况用了大量的低效的instanceof判断和转型操作.

为了优化这种情形,彻底解决这个问题,我想应该设计一个第三方类来消除这种依赖性,并且让界面跳转不要这么费劲。这个第三方的类是这样设计的:

在这个类中,必须有一个变量来保存某一个界面跳转的路径,如A-B-C.路径一旦被保存,你就拥有了控制显示任何一个界面的权利了。在这个链中,第一个位置的界面应该是这次跳转的第一站,最后一个位置是当前站。这里存在一个因果关系:只有跳转了才可以跳回去。这样使得我们可以用数组来保存这个路径。现实中,跳转的情形应该不会超过10次,所以我们把路径长度设为10(当然你可以根据需要更改)。这个类的样子大概象这样:

class ViewPath{

JPanel[] pnlPath = null; //跳转的界面路径,界面跳转最大10个层次吧!!!

int index = 0; //路径中的当前下标

BaseView bsView = null; //当前路径所在的同一个View

//在路径中寻找目标的方法

public int find(JPanel pnl){ //该路径下是否有某个Panel,有的话返回下标,没有的话返回-1

if(bsView==null) return -1; //没有初始化,该路径下没有任何Panel

for(int i=0;i if(pnl==pnlPath[i]){

index = i;

return i; //如果找到了则返回位置,并且把当前位置设为目标位置

}

}

return -1; //没有找到,返回-1

}

//构造函数

ViewPath(JPanel myPanel,BaseView myView){

pnlPath = new JPanel[10]; //设置路径最大长度为10

bsView = myView; //设置该路径所属的那个View

pnlPath[0] = myPanel; //设立起始站

index = 0; //设立起始站索引

}

}

这样一个类就完成了保存一次跳转路径的作用.(当然,是否应该在find方法中设立目标位置是否合适有待商榷)

那么我们如何使用这样一个路径?

我们设立一个辅助类来完成这个工作,我们命名为ViewJump,我们知道作为辅助的类最好是不要有实例,特别是象这样的起接口作用的类,只提供静态方法.它的框架象这样:

public class ViewJump{

private static ViewPath[] viewPath = null; //路径池,系统多处使用,静态但私有,因为供内部用

private ViewJump(){} //私有构造方法,辅助类只提供静态方法

private static int find(JPanel pnl); //寻找给定的Panel是否在已有路径中,私有

private static int newPath(JPanel myPanel,BaseView myView); //建立一个新路径,私有

/**

* 每个类需要使用该辅助类时都需要第一步注册自己,然后才能做其他操作

* 返回一个注册码id,辅助类需要使用这个注册码进行其他操作

*/

public static int registerPath(JPanel myPanel,BaseView myView);

/**

* 设立下一个界面.

*/

public static void setNext(int id,JPanel aim);

/**

* 回到上一个界面

*/

public static void back(int id);

/**

* 回到第一个界面

*/

public static void backHome(int id);

/**

* 跳转到下一个界面

*/

public static void jump(int id);

}

完成这样一个类的代码量并不多,一百多行,但是却使得用户完全脱离了处理不同界面的烦恼.稍后会把该类的源码附上,值得一提的是,这个类的实现固然可以用到类似的实现当中,但是如果用户的界面结构并不是如此搭建,你就需要更改参数类型了.如果能把这些抽象出来,得到一个抽象类或接口,参数用Object类型.用户根据自己的需要去实现这些方法,岂不妙哉!

使用这个类,你可以简便的多的完成诸如上面的任务:

OneView中:

public void jump(){

MyView myView = new MyView();

int id = ViewJump.registerPath(this.xxPanel,this);

ViewJump.setNext(id,myView.getPanel());

ViewJump.jump(id);

}

MyView中退回的部分:

protected void goBack(){

int id = ViewJump.registerPath(this.myPanel,this);

ViewJump.back(id);

}

天哪,这并不神奇,600行代码仅仅用了两行就实现了!

附:完整代码:(我把ViewPath类放在同一个文件ViewJump.java里,代码上面已经给出)

public class ViewJump{

private static ViewPath[] viewPath = null;

//私有构造函数

private ViewJump(){}

//寻找该Panel是不是在路径中

/**

* 找到了返回在实例数组中的下标

* 没有找到返回-1

* @param pnl

* @return

*/

private static int find(JPanel pnl){

// System.out.println("执行find() in ViewJump");

if(viewPath == null || viewPath.length==0) return -1;

for(int i = 0;i ViewPath vp = viewPath[i]; //对该路径检查

if(vp.find(pnl) != -1){

return i;

}

}

return -1;

}

//建立一个新的路径

/**

*

* @param myPanel

* @param myView

*/

private static int newPath(JPanel myPanel,BaseView myView){

System.out.println("执行newPath() in ViewJump");

//检验一下看有没有无效的路径,有则清除

if(viewPath == null || viewPath.length==0) {

viewPath = new ViewPath[]{new ViewPath(myPanel,myView)};

return 0;

}

ViewPath[] vjArr = new ViewPath[viewPath.length];

int count = 0;

for(int i = 0;i if(viewPath[i].bsView!=null){ //把不为空的值取出来

vjArr[count++] = viewPath[i];

}

}

viewPath = new ViewPath[count+1];

System.arraycopy(viewPath,0,vjArr,0,count); //复制到原来的数组变量中

//最后一个位置留给新加入的元素

viewPath[count] = new ViewPath(myPanel,myView);

return count;

}

//获得实例的方法

/**

* 必须检查该Panel是不是已经在路径中了,如果在路径中,

* 则返回注册的编号,用此编号扁可以访问到正确的类型了

* 如果不在路径中,则以此为开始新建一个新的路径

* 本来检查路径的时候没有必要检查路径的第一个元素,

* 因为一个元素不可能是开端,但是为了防止用户连续两次registerPath的错误

* 请把第一个元素也给检查一下

* myView 参数只有当该界面为跳转的起始点时才需要,否则保持原始的View

* @param me

* @param other

* 返回实例数组的下标,

*/

public static int registerPath(JPanel myPanel,BaseView myView){

System.out.println("执行registerPath() in ViewJump");

int idx = find(myPanel);

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

if(idx==-1){ //返回-1表示没有找到,建立一个新的路径

System.out.println("新建一个路径");

idx = newPath(myPanel,myView);

}

System.out.println("执行完注册路径..");

return idx; //返回实例下标

}

//设定要跳转的下一个目标

public static void setNext(int id,JPanel aim){

if(id0||id=viewPath.length){

return;

}

ViewPath vp = viewPath[id];

//设定目标,从这里看,这是存在安全漏洞的,如果使用者乱传递id进来的话

JPanel[] path = vp.pnlPath;

path[vp.index+1] = aim;

}

//回到上一个

public static void back(int id){

if(id0||id=viewPath.length){

return;

}

ViewPath vp = viewPath[id];

//回到上一个界面

if(vp.index0){ //只有当前面有路径时才作

vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的

vp.index--; //游标往前走一步

vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER); //增加当前的到界面

vp.bsView.validate();

vp.bsView.repaint();

}

}

//回到起源处

public static void backHome(int id){

if(id0||id=viewPath.length){

return;

}

ViewPath vp = viewPath[id];

//直接回到第一步,需要清除该路径吗?中途断裂怎么办?办法是检查View是否已为空

//选择不清除,每次在建立新的路径时,检查路径是不是已经无效了

vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的

vp.index = 0; //游标往前走一步

vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER); //增加当前的到界面

vp.bsView.validate();

vp.bsView.repaint();

}

//跳转到下一处

public static void jump(int id){

if(id0||id=viewPath.length){

return;

}

ViewPath vp = viewPath[id];

if(vp.pnlPath[vp.index+1]==null){

return; //下一步根本没有设置

}

vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的

vp.index++;

vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER);

vp.bsView.validate();

vp.bsView.repaint();

}

}

关于javajump框架和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。