所以这个有点奇怪 - 为什么从Java运行.exe文件提供不同的输出而不是直接运行.exe。
当java在行下面执行时,它会调用我生成的.exe文件,该文件适用于3CX电话系统。
p = Runtime.getRuntime().exec("3cx-api-application/orderly-3cx.exe");
当从java / eclipse / jar文件执行代码时,将打印以下错误。
INFO: 3CX Initialization Started
Jun 08, 2017 1:58:19 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
INFO: Sending: Initializing 3cx-Orderly Connector
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE:
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE: Unhandled Exception: TCX.Configuration.Exceptions.PhoneSystemException: ConfigServer is not connected
Jun 08, 2017 1:58:28 PM com.orderlysoftware.threecx.Orderly3CXConnector threeCXinit
SEVERE: SEVERE: at TCX.Configuration.PhoneSystem.Connect()
现在当我通过进入3cx-api-application直接导航到.exe文件并点击orderly-3cx.exe程序执行得很好,给我以下输出。
注意:初始化3cx-orderly连接器'两个输出线。
Initializing 3cx-Orderly Connector
Program Initialized
Initialize Monitor
*0 NOT REGISTEREDVMB(0/0)
a length: 0
*1 NOT REGISTEREDVMB(0/0)
a length: 0
更奇怪的是,这曾经在java中工作但现在却没有。所有.exe文件应该连接到3CX API并将一些输出打印到控制台,然后应该由java类读取此输出。
我已经清理了两个项目(eclipse / visual studio),重新编译了所有类等。仍然是同样的问题
答案 0 :(得分:1)
可执行文件从与其自身相同的目录中读取配置文件。您需要从该目录运行可执行文件。见http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String-java.lang.String:A-java.io.File-
尝试:
p = Runtime.getRuntime().exec("orderly-3cx.exe", null, "3cx-api-application");
(P.S.Oracle的Javadoc建议新应用程序应使用ProcessBuilder而不是Runtime。)