Problem with FRM-40403

I'm getting the following error when trying to commit a form in Forms 6i
FRM-40403: A calling form has unapplied changes. Save not allowed
The scenario is the following:
I have Form A which calls Form B, when I save Form B I get the error and nothing is saved on that form... The problem is that I have another form, lets called it Form C which also calls Form B and I am able to save Form B there... the call I'm doing its exactly the same in both forms A & C,
CALL_FORM('FORM_B', NO_HIDE, DO_REPLACE, NO_QUERY_ONLY, pl_id);
I googled the error but the only workaround I found is using OPEN_FORM to use another session, it actually works but then I loose some global variables I set in Form B so I can use in Form A; and the actual course of the code after doing the call_form doesn't execute.
Any ideas what could it be??
Thanks in advance

you mean all the changes to the form?? Its sounds kinda complicatedThe problem:
If you use POST in a form, all outstanding changes will be applied against the database (INSERT's, UPDATE's, DELETE's are executed), but there is no final commit sent to the database. But.. forms treats the status of all objects as applied (means the record-status of all records is QUERY, the Form-Status is QUERY). If you now exit the form, forms will not ask you "Do you want to save the changes" for there are no outstanding changes. But... If the forms is exited, there will be no commit executed and therefore the formerly applied changes are lost.
To avoid this, you have to "remember" that you posted in some variable and check that variable additionally to the Form-Status, something like
IF :SYSTEM.FORM_STATUS='CHANGED' OR :GLOBAL.MY_PERSONNEL_COMMIT_FLAG='Y' THEN
  -- now ask for "Do you want to save the changes"
  -- and do a COMMIT_FORM if answered with yes
END IF;

Similar Messages

  • Problem with Oi9 Forms...FRM-10039 error...

    Hi.
    I installed Oi9 Developer Suite v9.0.2, because I need Forms. I've Oi9 Database v9.2, Win XP and Polish language.
    No problems with a installation. The Oi9 DB and Oi9 DS are in separated orahomes.
    When I start Forms, I've 2 alerts:
    -open error of ...\ora90\form90\fmrPLw.res programm Oracle*Terminal
    -FRM-10039 Unable to startup the Forms Builder.
    Where is the problem?
    Any suggestions?
    Regards from:
    Marek Jasinski
    [email protected]

    If you have Patch 1 to 9iDS the Polish language files will be there - but you have to install them as an extra step - see section 1.7.1 and 1.7.2 of the Release notes for the patch - you can also see the release notes online at:
    http://otn.oracle.com/products/forms/pdf/9021comp_rn_w_forms.pdf

  • FRM-40403 A Calling for has.....

    Hi guyz,
    im facing some strange problem, hope someone give me a suitable answer.
    My application is working fine just i attach the another datablock its starts giving problem with an error
    FRM-40403: A Calling form has unapplied changes. Save not allowed.
    I create some parameters and passing the values below is the parameter code.
    declare
    plist ParamList;
    begin
    plist := Create_Parameter_List('INPUT_PARAM');
    Add_Parameter(plist, 'empid',TEXT_PARAMETER,:employee.empid);
    Add_Parameter(plist, 'emp_name',TEXT_PARAMETER,:employee.emp_name);
    Add_Parameter(plist, 'dob',TEXT_PARAMETER,:employee.dob);
    CALL_FORM('PORTS',no_HIDE,NO_REPLACE,NO_QUERY_ONLY,plist);
    DESTROY_PARAMETER_LIST(plist);
    end;
    im unable to save the data in form B before it was working fine.
    anyone help me why this problem occured? even though i delete the newly added datablock even though not working. help me plz...
    Regards

    Before calling form b you could check :SYSTEM.FORM_STATUS, if that is changed, the changed have to be applied to DB before callin form b, maybe something like:
    IF :SYSTEM.FORM_STATUS='CHANGED' THEN
      IF <Aks use for saving> THEN
        COMMIT_FORM;
        CALL_FORM('FORMB');
      END IF;
    ELSE
      CALL_FORM('FORMB');
    END IF;

  • Forms 6.0.5.0.2: Problems with Oracle 7.3.4, OK with 8.0.5

    I have problems with Forms 6.0.5.0.2 running against an Oracle
    7.3.4 with Net8. When trying to insert or update records I get
    an FRM-40508: ORACLE error: unable to INSERT record/FRM-40509:
    ORACLE error: unable to UPDATE record. The Help | Display Error
    menu item shows statement = "S3AVWU3wo|$6o|" (garbled
    message), error = "ORA-12663: Services required by client not
    available on the server" (sometimes it's "ORA-01403: no data
    found").
    It works fine against 8.0.5. As far as I'm aware Forms 6 is
    certified against 7.3.4?
    Any clues?
    Thanks for your help.
    Finn
    null

    We had to upgrade from 7.3.2 to 7.3.4 when we moved over to Forms
    6.0.5.0.2 and it's working fine.
    We are using Net 8 as well.
    Finn Ellebaek Nielsen (ChangeGroup ApS) (guest) wrote:
    : I have problems with Forms 6.0.5.0.2 running against an Oracle
    : 7.3.4 with Net8. When trying to insert or update records I get
    : an FRM-40508: ORACLE error: unable to INSERT record/FRM-40509:
    : ORACLE error: unable to UPDATE record. The Help | Display Error
    : menu item shows statement = "S3AVWU3wo|$6o|" (garbled
    : message), error = "ORA-12663: Services required by client not
    : available on the server" (sometimes it's "ORA-01403: no data
    : found").
    : It works fine against 8.0.5. As far as I'm aware Forms 6 is
    : certified against 7.3.4?
    : Any clues?
    : Thanks for your help.
    : Finn
    null

  • Problem with set_item_instance_property and set_lov_property

    Hello guys,
    I am using oracle forms 6i and new to it. I am having a multi data block.
    I am facing a problem when I try to set the item instance property with respect to the list type.
    1) Basically, I am having a list item having three types MANUAL, INVOICE and BOE. All are independent of each other. I am facing the problem with the MANUAL type.
    I have written this code on When-Validate-Trigger of the list item as well as When-List-Changed. Also I am not setting the properties of any items initially(neither on When-New-Form-Instance nor on When-New-Block-Instance).
    if block.doc_type = 'MANUAL' then
    set_item_instance_property('BLOCK.VENDOR_NO', to_number(:system.cursor_record), REQUIRED,PROPERTY_TRUE);
    end if;
    But I am getting this warning/error frm 41383 - no such property for set_item_instance_property on both the triggers for the first time when I open the form and thereafter. During the same form session, if I click on the next line it shows a message Field cannot be empty and directs to the item where I compulsory need to insert a value. I also tried using to_number(:system.trigger_record) but getting the same issue. There are many more items I need to set the same property for.
    2)The invoice item on the block/form has a LOV. Another requirement is when I select 'MANUAL' , that LOV should not appear on selection of 'MANUAL' type and the user should be able to insert the value manually and validate manually. I did use set_lov_property, but did not get the correct usage. Please assist as soon as you can.
    Edited by: 1005292 on May 20, 2013 12:04 PM

    Just out of my interest I would like to know what you exactly meant by "The :SYSTEM.CURSOR_RECORD reflects where the navigation cursor is; which could be different from the record that is initiating the event." in your reply.If you look at the Forms Help for both objects, you will see that...
    SYSTEM.CURSOR_RECORD represents the number of the record where the cursor is located. This number represents the record's current physical order in the block's list of records. The value is always a character string.
    SYSTEM.TRIGGER_RECORD represents the number of the record that Form Builder is processing. This number represents the record's current physical order in the block's list of records. The value is always a character string. Through PL/SQL you can send (using the GO_ITEM, GO_BLOCK and GO_RECORD built-ins) the interenal Forms Cursor to a different item, block or record within the current block. If, you GO to a different block or record in the same body of code and you then evaluated the :SYSTEM.CURSOR_RECORD and compared it with the :SYSTEM.TRIGGER_RECORD you would find that they are generally different.
    2) In response to the second one, do you want to say that when it I select MANUAL I do not use the set_item_property OR use this property and attach an LOV which does not return anything OR use this property, give the name of the same of the same LOV,I am using and set PROPERTY_FALSE. First a litte back ground. When an Item has an LOV assigned to it, Oracle Forms automatically displays what it calls the "LOV List Lamp" in the status bar. With Forms 9i and higher, it displays and "List of Valu..." in the status bar when an item has an LOV assigned to it. Items can have an LOV assigned during design-time or during run-time. You cannot, however, unassign an LOV during Run-time becuase the SET_ITEM_PROPERTY built-in requires you to pass a valid LOV object name.
    Well, as I was writing this, it occured to me that you will not be able to set the LOV assigned to your multi-row item at run-time either because once you assign an LOV to an item in a multi-row block, all occurances of the Item will have the LOV assigned. This being the case, I would recommend using a button and give it the appearance of enabled or disabled by using the VISUAL_ATTRIBUTE property and add code to the button so that if the row status is MANUAL then nothing happens. Using this method, you would create two Visual Attribute (VA) objects; ENABLED and DISABLED. The ENABLED VA would make the button look like a normal button while the DISABLED VA would make the button look like it is disabled (grey out button text, etc).
    I would also like to know when to use set_lov_property and if you could explain in brief with an example.The only time I have used the SET_LOV_PROPERTY() built-in is when I needed to change the Record Group query assigned to the LOV. We have a form where depending on the "Action" selected, the LOV for a certain item needed to change. The values returned by the LOV were still assigned to the same block items, so rather than create multiple LOVs and set the Column Mapping for each LOV, I just create a Record Group object for each action and then used the SET_LOV_PROPERTY() built-in to change the LOV TITLE and GROUP_NAME. This way, I was able to reuse the LOV and it's existing column mappings while changing the record group that provided the data for the LOV.
    The problem lies when I am entering the fields after the invoice number. The fields before the invoice no including the field of invoice no hold the value entered but when I click/press a tab key to go on to the next field the values in the earlier fields(i.e fields before invoice no and invoice no field) disappear i.e. the values do not hold their place and again prompts me from start to enter the vendor no.Are you navigating to a new row/record? That could explain the disappearing data. If not, then I would look for a trigger on the item you're navigating too or for a Block level When-New-Item-Instance trigger that has code that sets the items to null. It sounds like something in the design is causing the field values to disappear (get set to NULL) so I would look at what happens in your form when a navigation event occurs.
    @Andreas - actually, REQUIRED is a valid property for the Set-Item-Instance-Property() built-in. ;)
    Hope this helps,
    Craig...

  • What is the exact problem with this file?

    Hi all,
    There is an old form , which was not in use from many days.
    Now when we tried to run the form, i got the error saying "FRM-40734:Internal Error:Pl/SQL error occured.", in the login form.
    When i tried to open the fmb file in Oracle Forms Builder 6i, i got the following error:
    FRM-10102: Cannot attach PL/SQL library d2kwutil. This library attachment will be lost if the module is saved., but the fmb file got open.
    The login button has the following code:
    DECLARE
      UNAME VARCHAR2(30);
      --USER_ID PARAMLIST;
      V_USER APUSERMA.USER_NAME%TYPE;
      V_PASSWED APUSERMA.USER_PASSWD%TYPE;
    BEGIN
    select user_CD INTO :GLOBAL.USER_ID from apuserma 
    where user_CD = :TI_USER_NAME AND user_PASSWD = :IT_USER_PASSWD
    AND SYSDATE BETWEEN USER_VALID_FRM AND USER_VALID_TO;
    :global.user_id  := substr(win_api_environment.read_registry('HKEY_LOCAL_MACHINE\system\currentcontrolset\control\computername\computername','computername'),1,10);
    :global.compname := :compname;
    compnm(:compname);
    --USER_ID := CREATE_PARAMETER_LIST('USER_id_NAME');
    call_form('Forms\MAIN_SCREEN',hide,DO_REPLACE);
    exception
      when no_data_found then
      MESSAGE('Incorrect Username or Password.  Please Re-Enter');
      message(' ');
      RAISE FORM_TRIGGER_FAILURE;
    END;
    EXIT_FORM;
    When i tried to compile, i got error saying ,
    Error 201 at line 10, column 28
    identifier 'WIN_API_ENVIRONMENT.READ_REGISTRY' must be declared.
    I am not getting to know What is the exact problem with this file?
    Help me with this please.
    Thank You.
    Oracle forms builder 6i.
    Oracle 9i.

    Vijetha wrote:
    I also want to know what is the use of  win_api_environment.read_registry('HKEY_LOCAL_MACHINE\system\currentcontrolset\control\computername\computername','computername') ??
    What does it do??
    If i comment the following line , will it be a problem??
    :global.user_id  := substr(win_api_environment.read_registry('HKEY_LOCAL_MACHINE\system\currentcontrolset\control\computername\computername','computername'),1,10);
    Because i commented the above line & compiled, so it is not giving any error now.
    So please tell me what win_api_environment.read_registry does??
    it's read windows registry value. So, no problem if you comment it.
    Thanks

  • Problem with Win_api_dialog.open_file

    I am trying to use win_api_dialog.open_file in a when-mouse-double-click trigger. I have attached the library (d2kwutil) to the form and placed the .dll files (d2kwut32.dll and d2kwut60.dll) in the bin. The code will compile cleanly but at runtime, I get FRM-40735/ORA-060508, saying that the function cannot be found. I think that this is a problem with the .dll files but cannot figure out why. I am on Forms 6i. I am presently using the get_file_name() function to perform the task, but I would like to use the api b/c you can change the dialog on the top of the box. Anyone know how to make it work? Thanks...
    KS

    Hi Jose,
    about win_api.preload... I have pasted a piece of D2KWUTIL.PLL:
        * PreLoad ->  Loads the DLL into memory
        *             DLL_Location argument allows you to explicitly load
        *             from a particular place
       PROCEDURE PreLoad;The problem sound like a DLL load problem. In same file you can read the search path to find DLL library:
      -- Search Path is:
      --  1. Preload override location set by WIN_API_PRELOAD.SET_LOAD_LOC
      --  2. D2KWUTILnn_PATH e.g. D2KWUTIL60_PATH
      --  3. D2KWUTIL_PATH
      --  4. Working Directory / O/S Path
      --  5. \Bin directory based in ..\bin
      --  6. %ORACLE_HOME%\BinWe have used this library regulary and it works fine.Feel free to send me a FMB test file at jcarmona arroba eprinsa.es in order to test it in my environment.
    Regards,
    Jose Carmona

  • Operating System Problem? FRM-400100

    We are encountering a problem accessing forms via the web as follows:
    We have an ERP system for our institution comprised of several modules. The system launches through a main form called usermenu.fmx; what is happening is that when we try to modify this form (this is done on a client machine) and the original fmx (on the server) is replaced by the new one, the forms servlet returns with FRM-400100 "cannot read form usermenu.fmx".
    What I am guessing is that somehow the fmx copy on the local machine is not being generated in a way that allows clients to access it when it is on the server (a privileges issue).
    Am I on the right track?
    What checks can I do to troubleshoot the problem?
    Ammar
    Edited by: elmousa68 on Apr 22, 2010 5:35 PM
    Sorry, Client is Windows XP SP3, Application Server Windows Server 2003

    Andreas,
    You are correct - according to Oracle support, if the development OS is 32 bit and the App Server OS is 64 bit, you must recompile the fmb's. It is for this reason that I asked if the deployed environment as 64 bit. :0
    InoL - as to your comment :0 - you might want to do a little research into Oracle Best Practices. Oracle has always recommend you compile the FMB on the deployed OS. As to Commercial Off The Shelf (COTS) application, you have to purchase a version compatible with your App Server OS. I use to work for a Company that produced a COTS application based on Oracle Forms and part of the software installation routine was to compile the fmx files from the fmb's.
    Craig...

  • Problems with OLE Container in QUERY

    Hi all,
    I have problem with OLE Container when I am trying to retrieve data from the database. Inserting is no problem and commit is done. I am doing it with
    initialize_container('block.ole_object','C:\test.doc');
    I have only one column of BLOB type and it is last in the block as it was suggested somewhere on the forum.
    When I am trying to retrieve the already inserted data I get error with the following
    Description:
    FRM-40505: Oracle ERROR: unable to perform query and CTRL+F1 says the following:
    ORA-00932: inconsistent data types: expected got
    The forms and the database are as follow:
    Forms [32 Bit] Version 6.0.8.24.1 (Production)
    Oracle Database 10g Enterprise Edition Release 10.1.0.4.2 - Production
    I need immediate help!!!

    This may be related to the 10g database, I'm not sure as there is no way for me to test it. I know that it works with a 9i database.
    One thing to check is to make sure that you don't have the FORMS60_DISABLE_DESCRIBE set to 1 within the Oracle registry.
    If this doesn't work, your only option might be to use a LONG RAW instead of a BLOB column type in the database.

  • Problems with the conection of acess db with midlet

    hey there,well its good to knw that u ppl have expirience in j2me.well , im having problem with the connection of access db with j2me.could you brief me on what exactly i should do in order to do connect it to run a query and save some info into the db frm the midlet,
    thanx.

    As I said earlyer today, just a few topics back, you can't do that. Read here:
    http://forum.java.sun.com/thread.jspa?threadID=615921&tstart=0
    Could you people please use the search option! Answering the same questions over and over is realy boring (specially if they pop up several times a day)..

  • HT201210 How to correct Problems with cross connections

    How to correct Problems with cross connections

    Nope not a wrg #, its been a call frm my mom, my son and my brothers that show on my ph, numbers that have been programmed in for years. Thanks  

  • A problem with threads

    I am trying to implement some kind of a server listening for requests. The listener part of the app, is a daemon thread that listens for connections and instantiates a handling daemon thread once it gets some. However, my problem is that i must be able to kill the listening thread at the user's will (say via a sto button). I have done this via the Sun's proposed way, by testing a boolean flag in the loop, which is set to false when i wish to kill the thread. The problem with this thing is the following...
    Once the thread starts excecuting, it will test the flag, find it true and enter the loop. At some point it will LOCK on the server socket waiting for connection. Unless some client actually connects, it will keep on listening indefinatelly whithought ever bothering to check for the flag again (no matter how many times you set the damn thing to false).
    My question is this: Is there any real, non-theoretical, applied way to stop thread in java safely?
    Thank you in advance,
    Lefty

    This was one solution from the socket programming forum, have you tried this??
    public Thread MyThread extends Thread{
         boolean active = true;          
         public void run(){
              ss.setSoTimeout(90);               
              while (active){                   
                   try{                       
                        serverSocket = ss.accept();
                   catch (SocketTimeoutException ste){
                   // do nothing                   
         // interrupt thread           
         public void deactivate(){               
              active = false;
              // you gotta sleep for a time longer than the               
              // accept() timeout to make sure that timeout is finished.               
              try{
                   sleep(91);               
              }catch (InterruptedException ie){            
              interrupt();
    }

  • Problem with Threads and a static variable

    I have a problem with the code below. I am yet to make sure that I understand the problem. Correct me if I am wrong please.
    Code functionality:
    A timer calls SetState every second. It sets the state and sets boolean variable "changed" to true. Then notifies a main process thread to check if the state changed to send a message.
    The problem as far I understand is:
    Assume the timer Thread calls SetState twice before the main process Thread runs. As a result, "changed" is set to true twice. However, since the main process is blocked twice during the two calls to SetState, when it runs it would have the two SetState timer threads blocked on its synchronized body. It will pass the first one, send the message and set "changed" to false since it was true. Now, it will pass the second thread, but here is the problem, "changed" is already set to false. As a result, it won't send the message even though it is supposed to.
    Would you please let me know if my understanding is correct? If so, what would you propose to resolve the problem? Should I call wait some other or should I notify in a different way?
    Thanks,
    B.D.
    Code:
    private static volatile boolean bChanged = false;
    private static Thread objMainProcess;
       protected static void Init(){
            objMainProcess = new Thread() {
                public void run() {
                    while( objMainProcess == Thread.currentThread() ) {
                       GetState();
            objMainProcess.setDaemon( true );
            objMainProcess.start();
        public static void initStatusTimer(){
            if(objTimer == null)
                 objTimer = new javax.swing.Timer( 1000, new java.awt.event.ActionListener(){
                    public void actionPerformed( java.awt.event.ActionEvent evt){
                              SetState();
        private static void SetState(){
            if( objMainProcess == null ) return;
            synchronized( objMainProcess ) {
                bChanged = true;
                try{
                    objMainProcess.notify();
                }catch( IllegalMonitorStateException e ) {}
        private static boolean GetState() {
            if( objMainProcess == null ) return false;
            synchronized( objMainProcess ) {
                if( bChanged) {
                    SendMessage();
                    bChanged = false;
                    return true;
                try {
                    objMainProcess.wait();
                }catch( InterruptedException e ) {}
                return false;
        }

    Thanks DrClap for your reply. Everything you said is right. It is not easy to make them alternate since SetState() could be called from different places where the state could be anything else but a status message. Like a GREETING message for example. It is a handshaking message but not a status message.
    Again as you said, There is a reason I can't call sendMessage() inside setState().
    The only way I was able to do it is by having a counter of the number of notifies that have been called. Every time notify() is called a counter is incremented. Now instead of just checking if "changed" flag is true, I also check if notify counter is greater than zero. If both true, I send the message. If "changed" flag is false, I check again if the notify counter is greater than zero, I send the message. This way it works, but it is kind of a patch than a good design fix. I am yet to find a good solution.
    Thanks,
    B.D.

  • Problem with threads running javaw

    Hi,
    Having a problem with multi thread programming using client server sockets. The program works find when starting the the application in a console using java muti.java , but when using javaw multi.java the program doesnt die and have to kill it in the task manager. The program doesnt display any of my gui error messages either when the server disconnect the client. all works find in a console. any advice on this as I havent been able to understand why this is happening? any comment would be appreciated.
    troy.

    troy,
    Try and post a minimum code sample of your app which
    does not work.
    When using javaw, make sure you redirect the standard
    error and standard output streams to file.
    Graeme.Hi Graeme,
    I dont understand what you mean by redirection to file? some of my code below.
    The code works fine under a console, code is supposed to exit when the client (the other server )disconnects. the problem is that but the clientworker side of the code still works. which under console it doesnt.
    public class Server{
    ServerSocket aServerSocket;
    Socket dianosticsSocket;
    Socket nPortExpress;
    ClientListener aClientListener;
    LinkedList queue = new LinkedList();
    int port = 0;
    int clientPort = 0;
    String clientName = null;
    boolean serverAlive = true;
    * Server constructor generates a server
    * Socket and then starts a client threads.
    * @param aPort      socket port of local machine.
    public Server(int aPort, String aClientName, int aClientPort){
    port = aPort;
    clientName = aClientName;
    clientPort = aClientPort;
    try{
    // create a new thread
    aServerSocket = new ServerSocket(port) ;
    // connect to the nPortExpress
    aClientListener = new ClientListener(InetAddress.getByName(clientName), clientPort, queue,this);
    // aClientListener.setDaemon(true);
    aClientListener.start();
    // start a dianostic port
    DiagnosticsServer aDiagnosticsServer = new DiagnosticsServer(port,queue,aClientListener);
    // System.out.println("Server is running on port " + port + "...");
    // System.out.println("Connect to nPort");
    catch(Exception e)
    // System.out.println("ERROR: Server port " + port + " not available");
    JOptionPane.showMessageDialog(null, (e.toString()),"ERROR: Server port " + port + " not available", JOptionPane.ERROR_MESSAGE);
    serverAlive = false;
    System.exit(1);
    while(serverAlive&&aClientListener.hostSocket.isConnected()){
    try{
    // connect the client
    Socket aClient = aServerSocket.accept();
    //System.out.println("open client connection");
    //System.out.println("client local: "+ aClient.getLocalAddress().toString());
    // System.out.println("client localport: "+ aClient.getLocalPort());
    // System.out.println("client : "+ aClient.getInetAddress().toString());
    // System.out.println("client port: "+ aClient.getLocalPort());
    // make a new client thread
    ClientWorker clientThread = new ClientWorker(aClient, queue, aClientListener, false);
    // start thread
    clientThread.start();
    catch(Exception e)
    //System.out.println("ERROR: Client connection failure");
    JOptionPane.showMessageDialog(null, (e.toString()),"ERROR: Client connection failure", JOptionPane.ERROR_MESSAGE);
    }// end while
    } // end constructor Server
    void serverExit(){
         JOptionPane.showMessageDialog(null, "Server ","ERROR: nPort Failure", JOptionPane.ERROR_MESSAGE);
         System.exit(1);
    }// end class Server
    *** connect to another server
    public class ClientListener extends Thread{
    InetAddress hostName;
    int hostPort;
    Socket hostSocket;
    BufferedReader in;
    PrintWriter out;
    boolean loggedIn;
    LinkedList queue;      // reference to Server queue
    Server serverRef; // reference to main server
    * ClientListener connects to the host server.
    * @param aHostName is the name of the host eg server name or IP address.
    * @param aHostPort is a port number of the host.
    * @param aLoginName is the users login name.
    public ClientListener(InetAddress aHostName, int aHostPort,LinkedList aQueue,Server aServer)      // reference to Server queue)
    hostName = aHostName;
    hostPort = aHostPort;
    queue = aQueue;
    serverRef = aServer;      
    // connect to the server
    try{
    hostSocket = new Socket(hostName, hostPort);
    catch(IOException e){
    //System.out.println("ERROR: Connection Host Failed");
    JOptionPane.showMessageDialog(null, (e.toString()),"ERROR: Connection to nPort Failed", JOptionPane.ERROR_MESSAGE);     
    System.exit(0);
    } // end constructor ClientListener
    ** multi client connection server
    ClientWorker(Socket aSocket,LinkedList aQueue, ClientListener aClientListener, boolean diagnostics){
    queue = aQueue;
    addToQueue(this);
    client = aSocket;
    clientRef = aClientListener;
    aDiagnostic = diagnostics;
    } // end constructor ClientWorker
    * run method is the main loop of the server program
    * in change of handle new client connection as well
    * as handle all messages and errors.
    public void run(){
    boolean alive = true;
    String aSubString = "";
    in = null;
    out = null;
    loginName = "";
    loggedIn = false;
    while (alive && client.isConnected()&& clientRef.hostSocket.isConnected()){
    try{
    in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
    if(aDiagnostic){
    out.println("WELCOME to diagnostics");
    broadCastDia("Connect : diagnostics "+client.getInetAddress().toString());
    out.flush();
    else {       
    out.println("WELCOME to Troy's Server");
    broadCastDia("Connect : client "+client.getInetAddress().toString());
         out.flush();
    String line;
    while(((line = in.readLine())!= null)){
    StringTokenizer aStringToken = new StringTokenizer(line, " ");
    if(!aDiagnostic){
    broadCastDia(line);
    clientRef.sendMessage(line); // send mesage out to netExpress
    out.println(line);
    out.flush();
    else{
    if(line.equals("GETIPS"))
    getIPs();
    else{
    clientRef.sendMessage(line); // send mesage out to netExpress
    out.println(line);
    out.flush();
    } // end while
    catch(Exception e){
    // System.out.println("ERROR:Client Connection reset");
                             JOptionPane.showMessageDialog(null, (e.toString()),"ERROR:Client Connection reset", JOptionPane.ERROR_MESSAGE);     
    try{
    if(aDiagnostic){
    broadCastDia("Disconnect : diagnostics "+client.getInetAddress().toString());
    out.flush();
    else {       
    broadCastDia("Disconnect : client "+client.getInetAddress().toString());
         out.flush();
    // close the buffers and connection;
    in.close();
    out.close();
    client.close();
    // System.out.println("out");
    // remove from list
    removeThreadQueue(this);
    alive = false;
    catch(Exception e){
    // System.out.println("ERROR: Client Connection reset failure");
    JOptionPane.showMessageDialog(null, (e.toString()),"ERROR: Client Connection reset failure", JOptionPane.ERROR_MESSAGE);     
    }// end while
    } // end method run
    * method run - Generates io stream for communicating with the server and
    * starts the client gui. Run also parses the input commands from the server.
    public void run(){
    boolean alive = true;
    try{
    // begin to life the gui
    // aGuiClient = new ClientGui(hostName.getHostName(), hostPort, loginName, this);
    // aGuiClient.show();
    in = new BufferedReader(new InputStreamReader(hostSocket.getInputStream()));
    out = new PrintWriter(new OutputStreamWriter(hostSocket.getOutputStream()));
    while (alive && hostSocket.isConnected()){
    String line;
    while(((line = in.readLine())!= null)){
    System.out.println(line);
    broadCast(line);
    } // end while
    } // end while
    catch(Exception e){
    //     System.out.println("ERRORa Connection to host reset");
    JOptionPane.showMessageDialog(null, (e.toString()),"ERROR: Connection to nPort reset", JOptionPane.ERROR_MESSAGE);
    try{
    hostSocket.close();
         }catch(Exception a){
         JOptionPane.showMessageDialog(null, (a.toString()),"ERROR: Exception", JOptionPane.ERROR_MESSAGE);
    alive = false;
    System.exit(1);
    } // end method run

  • Problem with threads and camera.

    Hi everybody!
    I've a problem with taking snapshot.
    I would like to display a loading screen after it take snapshot ( sometimes i
    have to wait few seconds after i took snapshot. Propably photo is being taken in time where i have to wait).
    I was trying to use threads but i didn't succeed.
    I made this code:
    display.setCurrent(perform);               
            new Thread(new Runnable(){
                public void run() {               
                    while((!performing.isShown()) && (backgroundCamera.isShown())){
                        Thread.yield();
                    notifyAll();
            }).start();
            new Thread(new Runnable(){
                public void run() {
                    try {
                        this.wait();                   
                    } catch(Exception e) {
                        exceptionHandler(e);
                    photo = camera.snapshot();                               
                    display.setCurrent(displayPhoto);
            }).start();This code is sometimes showing performing screen but sometimes no.
    I don't know why. In my opinion performing.isShown() method isn't working correctly.
    Does anyone have some idea how to use threads here?

    Hi,
    I've finally managed to work this fine.
    The code:
           Object o = new Object();
           display.setCurrent(perform);               
            new Thread(new Runnable(){
                public void run() {               
                    while(!performing.isShown()){
                        Thread.yield();
                   synchronized(o) {
                      o.notify();
            }).start();
            new Thread(new Runnable(){
                public void run() {
                    try {
                        synchronized(o) {
                           o.wait(1);
                    } catch(Exception e) {
                        exceptionHandler(e);
                    photo = camera.snapshot();                               
                    display.setCurrent(displayPhoto);
            }).start();

Maybe you are looking for