Problems running external Win32 Multithread C-Program from Java

hi,
i just wrote a little java application which is calling my c-binary (a win32 multithread application written in pure ansi c) . let's call it "test.exe". i'm launching it via:
Runtime.getRuntime().exec(cmd, new String[] { env }, dir)the program is started correctly and i get all test.exe outputs on my java console (therefor i grabbed the inputstream and errorstream of the process-object ...). so far so good.
my problem is, that something with the multithreading seems to be wrong, when launching my test.exe from java!
for example, i have the following line of code in my c-program (test.exe):
WaitForSingleObject( g_hMutexREADY, INFINITE );if i launch my program as java process, this line seems to be ignored! that means, the program doesn't stop executing at this point (and is waiting for the mutex) but simply continues executing, causing the whole program to crash.
if i run the same program directly from the winxp commandline all is working fine (that means: the threads of 'test.exe' synchronize each other correctly via the mutexes)!
does anybody has an idea or have already had similar problems? maybe some win32 libraries are missing, could that be?
thanks a lot.
k4simir

I just debugged a little bit through my c program. and it's not the multithrading stuff causing the error, but the win32 socket creation!
my "multithreading c program" :-) is an ASR (automatic speech recognizer). it runs as socket server (on localhost) and accepts connections from clients (my java application). the client (java app) controls the ASR server (means start(), stop(), open(), close() ...). if the ASR server recognizes some user input, it will transfer it to the client for further processing.
so far the theory. if i launch the ASR server via the window command line, the communication and the other stuff works fine. now i want my java app to launch the ASR server.
the ASR fails, when it tries to create the socket:
g_Vars.kServSock = socket( AF_INET, SOCK_STREAM, 0 );the error code returned by WSAGetLastError() is 10106! i didn't find this error code in the msdn! so i don't know what it means or what might be the problem.
any ideas?
thanks a lot!
k4simir
here's the full code:
int     InitSocket( short sPortNr ) {
     int               iErr;
     SOCKADDR_IN     kMyAddr;
     iErr = StartUp();
     if( iErr != _SRC_OK ) {
          return _SRC_ERROR;
     // create server-socket:
     g_Vars.kServSock = socket( AF_INET, SOCK_STREAM, 0 );
     if( g_Vars.kServSock == INVALID_SOCKET ) {
          CleanUp();
          return _SRC_ERROR;
int StartUp() {
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     _DEBUGPRINT
     wVersionRequested = MAKEWORD( 2, 2 );
     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
          return _SRC_ERROR;
     if ( LOBYTE( wsaData.wVersion ) != 2 ||
           HIBYTE( wsaData.wVersion ) != 2 ) {
          WSACleanup( );
          return _SRC_ERROR;
     return _SRC_OK;
}

Similar Messages

  • Can we run EXE file/ Another Java Program from Java Application? How?

    Can we run EXE file and another java program from java application?
    Thanks in advance

    Example running adobe acrobat
    String command = "C:\\Program Files\\Adobe\\Acrobat 5.0\\Reader\\AcroRd32.exe /t "+selectedDocument+" \\\\CONTROL\\HP LaserJet 4L";
    Runtime rn = Runtime.getRuntime();
    Process process = rn.exec(command);
    process.waitFor();rykk

  • How do I call a C++ program from Java?

    I've tried using Runtime.exec to call my C++ program from Java but I don't think I'm doing it correctly. Could someone explain how to properly use it? Here's what I'm trying (this is in an applet that is only going to be running on an intranet so only PCs in my LAN will be affected):
    Runtime runtime=runtime.getRuntime();
    Process proc =runtime.exec("mkdir C:\\Test");

    What do you expect your operating system should do with a command "mkdir"? It doesn't understand this. "mkdir" is a shell command, so you need to execute the shell:
    runtime.exec("cmd /c mkdir C:\\test");

  • Error in calling 'C'  Program from Java

    Hi,
    We developed a 'C' Program and during compilation, we got a couple of Incompatible Prototype warnings. Then we made a Jni call to 'C' program from Java Program. The program returned a "Unsatisfied Link Error - unreference Symbol not found" error.
    Does Jni call fails owing to warnings by compiler?
    We are using Sun Solaris 2.8.
    Request your assistance as this a urgent issue.
    Thanks
    Srini

    Did you try running your C program through g++? It sounds like something is broken, but GCC often will allow you to compile anyways.
    -Jason Thomas.

  • Call visual prolog program from java

    Hi friends,
    is there someone help me to call ( run) prolog program from java.
    i write a parser with Javacc parser generator and stored parsed information in prolog database and I want create some query in java that work in the prolog file.
    how can i combine java and prolog programs. i used visual prolog.
    Can someone help me?
    Thanks you in advance.
    yours sincerely,
    ksu

    Since visual prolog can produce dll's, you can use JNI:
    http://java.sun.com/j2se/1.4.2/docs/guide/jni/index.html

  • How to Call abap functn/program from java layer

    Hi all,
        I have to develop a program which has to call abap function/program from java side or how to call a abap program through java ..
    pls send me related links or explanations.. dont send unrelated answers..
    Regards,
    Arivarasu S

    Hi,
    You mean accessing ABAP functions from J2EE perspective, then I think we can do this by using SAP Java Resource Adapter and also through webservices.
    SAP Java Resource Adapter (SAP JRA) can be used as an add-on for the SAP JCo SAP JRA enables the implementation of standard interfaces from diverse J2EE servers to the SAP JCo in the SAP Web AS. The SAP JRA thus simplifies
    communication with ABAP within heterogeneous J2EE landscapes.
    Go through the following links which has Good documentation on how to achieve this
    Accessing BAPIs Using the SAP Java Resource Adapter
    [https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/ad09cd07-0a01-0010-93a9-933e247d3ba4]
    Connectivity and Interoperability
    [https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/326d82e5-0601-0010-fca4-9caf27b89c26]
    Finally with WebServices. Accessing SAP Business Functions (ABAP) via Web Services
    [https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/06adbf03-0a01-0010-f386-d8e45561a3c4]
    Regards
    Raghu

  • Problem in calling order import concurrent program from BPEL

    Hi all,
    Iam doing a sales order creation in oracle apps using Apps Adapter.
    I have successfully inserted the order into the interface tables using an Apps adapter.
    Now I need to run Order Import program from BPEL to move the data from interface tables to the base tables for which i use another Apps Adapter.
    When I invoke the OEIMP concurrent program from BPEL ,request id is returned.But the concurrent program fails showing incomplete parameters.
    But it works when I invoke it from the front end in oracle apps.
    I think the problem lies in passing the inputs to the concurrent program from the BPEL.
    Any help to solve the issue will be appreciated.
    Thanks,
    goutam

    Previously, I was passing the values to the concurrent program variables through ASSIGN component,which resulted in some namespace issues.Then I replaced it with TRANSFORM component.
    Also,First I assigned the values to the concurrent program variables as 'Vision Operations'(operating_unit), 'Online'(order_source) ,No (validate_only), No (validate_desc_flex) which are mandatory and just left non mandatory variables without assigning values.
    I changed those values as *'204','0','N','N'*. And also set non mandatory variables value as EMPTY.
    After doing all these I found the concurrent program catches all the parameter values correctly, and the records got imported from interface tables to the base tables.Thus the sales order got created successfully.
    Thanks,
    goutam

  • Run program from Java

    Hi all,
    I need to run Cygwin (program which executes shell scripts on Windows) from Java,
    and run some script with Cygwin. Is it possible with Runtime.exec() run Cygwin and
    pass them some script to run?

    I also run into the same problem.
    My problem is i want to run Windows Xp's cmdshell throught java and pass it some parameters.
    I know there is a third party jar which can do it.
    So there must be some way,although maybe not too easy.

  • Closing a running windows XP program from java

    Hello,
    Im currently making a program in java under sdk 1.4.0_01 and i want to be able to close a program which is already running in windows(Emule).
    Is this possible?
    I know how to run it using: Process proc = Runtime.getRuntime().exec ("mulePath");
    ...but i dont know how to close it unless ive already run it from java.
    Any help appreciated!
    Craig

    Search the web for the NT Toolkit. It has utilities that you can use to kill a process on NT type os's.

  • Running a program from Java

    how do i launch one Java program from another?
    both .class files and the JRE directory are in the same directory

    You can use Runtime.exec() to run it as a seperate process, or you can always instantiate your secondary class. Do a search on the term "runtime.exec()" befure you go spawning another thread asking how to use it. That particular subject has been done to death many times already.

  • Run a program from java code

    I want to run this program from my java code,
    In Linux(ubuntu) I write this command to open the program window
    $ paraFoam -case /home/saud/OpenFOAM/OpenFOAM-1.5/run/tutorials/icoFoam/cavity/In my java code I wrote it like this("/home/saud/OpenFOAM/OpenFOAM-1.5/bin/" is the path of the program):
    String command = "/home/saud/OpenFOAM/OpenFOAM-1.5/bin/paraFoam " +
              "-case /home/saud/OpenFOAM/OpenFOAM-1.5/run/tutorials/icoFoam/cavity/";
    final Process myProcess = Runtime.getRuntime().exec(command);
    BufferedReader buf = new BufferedReader(new InputStreamReader(
              myProcess.getInputStream()));
    String line;
    while ((line = buf.readLine()) != null) {
         System.out.print(String.format("%s\t\n", line));
    buf.close();
    int returnCode = myProcess.waitFor();
    System.out.println("Return code = " + returnCode); Return code = 0
    but the program is not opening
    Edited by: Saud.R on Apr 11, 2009 3:37 AM

    Welcome to the Sun forums.
    I am not sure of the answer to your question, but people who use Processes regularly, warn other users to ensure they are also doing something with the error stream of the process, otherwise it can hang as you describe.

  • Calling external programs from Java?

    Hi All,
    Is there a way of calling external applications from Java without using Runtime.exec(). That method seems quite messy when you are dealing with streaming data from an input file to an output file. Basically what I'm asking is there a way to run a command the same way you would type it in a command shell?
    Thanks

    LeWalrus wrote:
    Ok, I've an external application that I want to be called inside a Java GUI. It has several input arguements, which the format looks something like:
    programname inputfile > outputfile
    Simple enough.
    >
    Works fine from a shell command line. From what I understand, this won't work using Runtime.exec() because that method will just start the application. Works fine from Runtime.exec(). Since you are'>' to write stdout to a file you need to us a shell to execute the command.
    String[] command = {"sh", "-c","programname inputfile > outputfile"};
    Process process = runtime.exec(command);
    You need to read, digest and implement the recommendations given in http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html .
    File input and output from the application has to be taken care of programatically (java.io stuff). Fine if you've only one input and output. But if you have several input files and hundreds of output files, where does this leave you. It would be much easier if you could pass a string command to the shell directly as if you typed it in the command line yoursel!

  • Cannot run batch program from Java Application

    Hi All,
    Im trying to run a batch file under windows from my Java Program. The batch file is located in the following path:
    C:\Program Files\MyApp\runme.bat
    The above-entioned path contains white space which is not allowed in NT.
    Im trying following code:
    import java.io.*;
    public class Exec {
    public static void main(String args) {
    try {
    Runtime.getRuntime().exec("cmd /c start C:/Program Files/MyApp/runme.bat");
    }catch(Exception ex){ ex.printStackTrace();}
    How to run this file?
    Thanks in advance.
    Ketan Malekar

    or use the overload that takes an array of strings as argument
    String[] command = {"cmd", "/c", "start", "C:/Program Files/MyApp/runme.bat");
    Runtime.getRuntime().exec(command);

  • Starting a external program from java

    hi iam trying to start MySQL server from java, the command in dos is as follows C:\mysql\bin\mysql -u username -p ,then the user hits return and the user is prompted to enter a password. i have got as far as entering the the C:\mysql\bin\mysql -u username -p but dont know how get the prompt back to the java program i would be greatfull if anyone could tell me where iam not doing,heres my code so far
    try{
    Runtime r=null;
    r=r.getRuntime();
    Process p=r.exec("C:/mysql/bin/mysql -u mark_r -p");
    p.waitFor();}
    catch(Exception ex){System.out.print("Error");}}

    You should try using the getOutputStream() and getInputStream() methods for the Process object. Each returns either an inputStream or OutputStream object.
    You should be careful if the mySQL password is added to the command since anyone doing a 'ps' on the machine could see the password.

  • Using console program from java swing

    Can anyone please tell me if the following is possible and how to do it. I want to create a gui for mencoder and so for example i will be wanting toexecute mencoder from the swing app to find out the the auto crop values so i can visually display them. As well when i am actually encoding the files i want to somehow use the progress output from the program and visually display it in swing using a progress bar. I am just quiter sure where to start or even what doing this is called. I know it is possible just now how.
    Cheers
    Damian

    You can use Runtime.exec or ProcessBuilder to run external programs.
    If you do that, I'd suggest trying to use arguments to mencoder that change its console output to be easier to parse. I don't know if such an option exists, but many programs built for the command line provide such options, and mencoder certainly provides a lot of options. Block off a few weeks and you might make your way through a third of the manual.
    Also the mplayer/mencoder suite may provide a C library. I don't recall. If it does, you might be able to use JNI.

Maybe you are looking for

  • Fusion drive and backup/restore issues

    Hi, since I installed a fusion drive on my early 2008 iMac, consisting of an internal 256GB SSD and an (external FW800) 320GB hard disk, I occassionally run into trouble when system updates are pending. In the past, at worst the time machine backup c

  • Standard report on changes in po document

    Hi all, Is there any standard report to Ability to view audit trail of releases and changes to all purchasing documents. Thanks & Regards,

  • Epson RS595 wont print on iMac

    Altho this almost new combo printer works fine on my iBook, it wont work on my iMac, its usual home. I've reinstalled the printer, redone the drivers, tried another cable, done permissions, checked the system pref. When I click Print, the logo appear

  • Process monitoring (PMI, Alert Management, Acknowledgments, ...)

    Hi, at the moment I face an interesting monitoring requirement. See below. I hope you experts can help me out? Many thanks for all your feedback REQUIREMENT <u>Users want to view the status of the message as it flows through the Sender, Hub(s) and Re

  • Do you have to get special packages for the iphone?

    Do you have to get special packages, that you have to pay for monthly, in order to get say internet, GPS, weather, etc?