想实现一个动能:现在有2个封装好的项目(exe)A、B(都是swing写的).
那么希望运行A后通过事件触发来调用执行B,同时需要传递参数给B(exe文件).或者说每次运行A.exe后触发B.exe后,B.exe每次都更新数据。现在实现的一种方法就是:
执行A.exe,点击按钮触发B.exe,其中在调用执行B.exe前先把传递的参数写入到本地磁盘的某txt文件。然后调用执行B.exe,B.exe程序的main方法实现读取赋值的本地磁盘的txt文件。从而实现传递参数的效果。但是这并不能满足需求,有没有什么方法能高效的实现每次A.exe触发事件后B.exe都能读取显示到刚刚传递的参数(读取txt写入的内容)。现在如果要现在的话只能每次触发A.exe事件后先判断是否有B.exe进程,有的话就关闭重新开启B.exe,没有就直接运行B.exe。这是一种很不科学的做法。求各位支支招。多谢。贴出部分相关代码://A.exe
public static void openExes()//通过cmd dos命令调用执行B.exe
{
Runtime rt=Runtime.getRuntime();
Process p=null;
try
{
p=rt.exec("\"C:/Prices/B.exe\"");
}
catch(Exception ex)
{
ex.printStackTrace();
} }
public static void main(String[] args) {
FileOperation fo=new FileOperation();//操作本地txt数据的类 --忽略
try
{
File file=new File("C:/message.txt");
fo.createFile(file); //创建txt
fo.writeTxtFile("参数一"+"\r\n"+"参数二",file); //写入参数至txt
}
catch(Exception ex)
{
ex.printStackTrace();
}
openExes(); //调用执行B.exe
} //B.exeString user="";
String pwd="";
try
{
FileOperation fo=new FileOperation();
File file=new File("C:/message.txt");//读取参数txt
String[] str=fo.read(file);
user=str[0];
pwd=str[1];
}
catch(Exception ex)
{
ex.printStackTrace();
}
LoginFrame frame=new LoginFrame(user,pwd);
.............
那么希望运行A后通过事件触发来调用执行B,同时需要传递参数给B(exe文件).或者说每次运行A.exe后触发B.exe后,B.exe每次都更新数据。现在实现的一种方法就是:
执行A.exe,点击按钮触发B.exe,其中在调用执行B.exe前先把传递的参数写入到本地磁盘的某txt文件。然后调用执行B.exe,B.exe程序的main方法实现读取赋值的本地磁盘的txt文件。从而实现传递参数的效果。但是这并不能满足需求,有没有什么方法能高效的实现每次A.exe触发事件后B.exe都能读取显示到刚刚传递的参数(读取txt写入的内容)。现在如果要现在的话只能每次触发A.exe事件后先判断是否有B.exe进程,有的话就关闭重新开启B.exe,没有就直接运行B.exe。这是一种很不科学的做法。求各位支支招。多谢。贴出部分相关代码://A.exe
public static void openExes()//通过cmd dos命令调用执行B.exe
{
Runtime rt=Runtime.getRuntime();
Process p=null;
try
{
p=rt.exec("\"C:/Prices/B.exe\"");
}
catch(Exception ex)
{
ex.printStackTrace();
} }
public static void main(String[] args) {
FileOperation fo=new FileOperation();//操作本地txt数据的类 --忽略
try
{
File file=new File("C:/message.txt");
fo.createFile(file); //创建txt
fo.writeTxtFile("参数一"+"\r\n"+"参数二",file); //写入参数至txt
}
catch(Exception ex)
{
ex.printStackTrace();
}
openExes(); //调用执行B.exe
} //B.exeString user="";
String pwd="";
try
{
FileOperation fo=new FileOperation();
File file=new File("C:/message.txt");//读取参数txt
String[] str=fo.read(file);
user=str[0];
pwd=str[1];
}
catch(Exception ex)
{
ex.printStackTrace();
}
LoginFrame frame=new LoginFrame(user,pwd);
.............
解决方案 »
- 如何确保调用super.XXX()
- 两个double数相乘,精度不准确,如何解决
- 关于switch的问题
- .c的文件 通过java程序调用TCC编译 java拦截System.out.println() 如何实现??
- java读取C#写的2进制文件问题
- Awt中的单选菜单怎么实现,是哪个类,,,提示一下...记不清楚了..
- 怎样用Jfreechart提供的开发包啊?我的程序运行不起来!
- classpath问题,谢谢先
- [Swing.JScrollPane]怎样让JScroolPane自动下滚啊
- java的String類或其他類中有沒有和vb中trim()函數一樣功能的方法,是什麼?
- 关于socket接收XML后乱码问题(JAVA)
- 如何读取一个inputstream两遍
1. 共享内存
2. Socket
3. 命名管道
4. 写文件
还有其他的暂时没什么概念了
nio的lock方法调用的是native lock函数(flock之类),所以应该是可以和其他语言兼容的。
思路:
一个读进程一个写进程对同一个文件操作;
文件被分成若干指定大小的区块,并编号从0~N;
写进程写入区块k完毕之后,先锁住区块k+1,再释放区块k;
读进程读取区块k之后,立即尝试锁住区块k+1;
当程序开始时,写进程必须先锁住区块0待写入,而读进程也是先尝试锁住区块0。如果无法控制进程开始的顺序,那么读进程需要轮询检测区块0是否有数据被写入,且不能长期持有锁。我觉得还是用socket比较方便。。
Socket方式: 让B作为服务端,监听端口,响应A传递过来的数据请求。
文件方式:用到2个文件,一个文件用于存放要传递的数据,另一个文件用于表示数据文件的访问锁。详细介绍文件方式:
1.无论A还是B想访问数据文件时,首先要查看锁文件是否存在,如果存在,说明该数据文件正在被他人使用,如果不存在,说明可以访问数据文件。
2.访问数据文件之前,先创建锁文件,创建失败说明锁竞争,重新再试,或者抛出异常。数据文件访问完毕后,要删除锁文件。最后,如果B程序是要被其他进程启动,那么,B程序必须会自动结束,而不是一直执行的那种程序。