java调用.bat文件的各种问题。被逼的啊,只能用这种方法试下,如果不行就要找服务端方了。代码有点乱...

不喜欢吃素的菜鸟 发布于 2013/06/24 15:56
阅读 716
收藏 1
// 声明:这只是个java程序,不是web程序。 

// 问题如下: 
// 第1个问题................................ 
// 有一个test_test.bat脚本和FTest类放在一起。目录为d:\test\socket_test\com\test\socket\test_test.bat d:\test\socket_test\com\test\socket\FTest.class 
// 有一个test_test.bat脚本放在应用根目录下d:\test\socket_test\test_test.bat 
// 下面ClassLoader.gerResouce("").我用myEclipse运行时可以找到的,当单独打包出去的时候,就报异常了。总是说d:\test\socket_test\com\test_test.bat文件不存在。 

// 第2个问题................................ 
// 我是运行d:\test\socket_test\test_test.bat文件里启动项目的。请问,后面会弹出很多cmd窗口,之前的怎么关闭,该怎么获取。 


// test_test.bat脚本的内容 
/* 

@ECHO OFF 
cd /d D:\test\jdk1.6.0_38\bin 
java -cp D:\test\socket_test -Djava.ext.dirs=D:\test\socket_test com.test.socket.FTest 192.168.0.23 10011 username_my 1.0 192.168.222.233 7887 true 
pause 

*/ 

package com.test.socket; 

public class FTest{ 
    public static void main(String[] args) {
        // URL url = FTest.class.getClassLoader().getResource(""); 
        URL url = FTest.class.getResource(""); 
        try { 
            URI ui = url.toURI(); 
            String path = ui.getPath().replaceAll(" ", "\" \""); 
            Runtime rt = Runtime.getRuntime(); 
            String bat = path.substring(1) + "test_test.bat"; 
            rt.exec("cmd.exe /C start /wait " + bat); 
        } catch (Exception e1) { 
            _log.error("发生异常", e1); 
        } 
    } 
} 
// 补充下,这是一个socket程序,这个程序的代码是别人给的,他们给的代码中有自己写的重连、断开等方法。
// 对方是服务端,我这里是客户端。
// 客户端的代码如这样:

public class Thread_client extends Thread{
	public Thread_client(){
		Thread_client c = new Thread_client();
		c.start();
	}
	
	public void run(){
		Socket socket = new Socket();
		socket.bind(new InetSocketAddress(cilentIp, clientPort));
		newSocket.connect(new InetSocketAddress(serverHost, serverPort));
		BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GBK"));
		while(true){
			String str = reader.readerLine();
			if(str == null){
				return;
			}
			// do other action
		}
	}
}

// 当str获取到Null的时候,就会退出。
// 现在主要是为了解决读到null的情况。
// 不管怎么试都不行,他们提供的方法也不行。
// 我自己改的时候,socket.close();c.stop();
// Socket socket = new Socket();
// socket.bind(new InetSocketAddress(cilentIp, clientPort));
// newSocket.connect(new InetSocketAddress(serverHost, serverPort)); // 这行总是包connect错误,address is use。

// 但是把整个程序停掉,重启test_test.bat就可以运行了。

加载中
0
b
b824379598
为什么不打包jar运行呢
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
东西没升级到生产,我把数据接入到本地了,反正以前的程序有问题。
0
polly
polly

Q1:你把runtime运行的命令行打印出来,看看打包后的路径字符串是否有问题?

Q2:bat里有pause,重新运行,前面的肯定停在pause那行,删掉pause试试

Q3:socket怎么突然变成newSocket了?笔误?

Q4:socket.setResuseAddress(true);试试

不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
我找到中解决方法,现在正在测试。 你的提议不错。 上面的类是我在文本写的,可能写错了地方。
返回顶部
顶部