Problem with uppercasing �

Hi,
I've found the following problem:
When you run:
System.out.println(Character.toUpperCase('�'));
System.out.println("�".toUpperCase());
System.out.println("�UN".toUpperCase());
System.out.println("Help Plea�e".toUpperCase());
with sdk 1.3 you get:


�UN
HELP PLEASSE
with sdk 1.4.1 you get:

SS
SSUN
HELP PLEASSE
Independently from wich sdk flavor you like the best , the semantics of this whole thing sounds rahter strange to me:
A string, converted to uppercase can have more characters than it originally had.
so for example y load a field my DB,I upercase it and when I update it might no longer fit because it might have even doblued it's size in the uppercasing.
Makind a geep analysys fo my problem, and with some help, I endded in this URL
http://german.about.com/library/anfang/blanfang_abc.htm
German for begginers:
There it reads:
� :
Lower case only. Replaces "ss" in some words. Not used in Swiss German.
gro� (big, great), die Stra�e (street)
BUT: das Wasser (water), dass (that), muss (must)
I don�t understand why:
If the letter has no uppercase does java try to invent that SS.
Furthermore, it is clear that:
Letter � could replace "ss" in some words but
who said that ss could replace � ????
Guys at sun:
a -> b does not imply
b -> a
I would be grateful if you could help me to understand what is going on with this.
Thank you very much
Santiago P�rez Ghiglia
[email protected]

JoachimSauer:
Thank you so much for your answer, it was really clear.
I would really fancy a 'SS' character. Although I can understand that upercasing a string could have a different meaning than uppercasing it's characters individually, because in a string the characters are in a context and whatsoever... I don't still like the idea of the growing on uppercase Strings. Just imagine what would you do if you wanted to unicode like Upercase a string in C, the string (char array) would take up more space so you could be forced to move the your string elsewhere (in memory) so that you cculd make it fit.
Anyway, your answer was of great help. I�ll probably start learning German.
Santiago
PD=So it's the "guys at Unicode" 's door the one I have to knock, =)

Similar Messages

  • Problem with uppercase letters in Preferences

    The following code [excuse lack of formatting]
    ----- snip ----
    import java.util.prefs.*;
    public class PrefTest {
    Preferences prefs = Preferences.systemRoot();
    public PrefTest() {
    public void DoIt() {
    Preferences myPref = prefs.node("com/MyCompany/MyPackage");
    Preferences prefa = myPref.node("MyClass1/Configuration");
    prefa.put("MyString", "MyValue");
    public static void main(String[] args) {
    PrefTest cfg = new PrefTest ();
    cfg.DoIt();
    ----- snip ----
    produces the following registry entries [Wndows XP]
    ----- snip ----
    REGEDIT4
    [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com]
    [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\/My/Company]
    [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\/My/Company\/My/Package]
    [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\/My/Company\/My/Package\/My/Class1]
    [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\/My/Company\/My/Package\/My/Class1\/Configuration]
    "/My/String"="/My/Value"
    ----- snip ----
    As you can see, all the uppercase letters are prefixed by a '/'.
    I can see nothing in the docs for java.util.prefs which defines
    such behaviour. Is this a bug, a feature or what?
    Regards, Alan Beale

    OK, I'll reply to my own post, as I think I've found the answer
    in case anyone else is interested...
    From
    http://developer.java.sun.com/developer/technicalArticles/releases/preferences/
    -- snip --
    You'll see the result of running the code above under J2SE Beta 1.4 for Windows in Figure 1. Note that WML is encoded as /W/M/L, and PreferredChannel as /Preferred/Channel because Preferences has case-sensitive keys and node-names, while the backing store of choice (in this case Windows Registry) does not.
    -- snip --
    This implies that reading back the prefs should work OK, although the
    data in the registry looks ugly. If this is the case [haven't tested
    it yet] then it's not a problem.

  • Problem with uppercase character in batch number

    Hi all,
    I have the following case:
    Currently we have a batch number v10047 (character "v" in lowercase), we can see this batch in MMBE, MB52.
    We want to transfer posting this batch, but when entering its number, SAP auto change the "v" from lowercase to uppercase, then it says "Batch number does not exist"!
    I cannot display this batch in MSC3N either due to the same problem.
    How can we prevent SAP from changing lowercase to uppercase?
    Many thanks,
    Duc.

    Hi Duc.,
    Lowercase batches cannot be created by a dialog posting. If you check
    the domain CHARG using SE11 you can see that the flag for 'lowercase'
    is not set. This means that the batch entered will always be converted
    to uppercase when this batch is entered on a screen.
    The possibility is that you've transferred the batch info from IDOC or BAPI?
    You may refer to note [104626|https://websmp201.sap-ag.de/~form/handler?_APP=01100107900000000342&_EVENT=REDIR&_NNUM=104626] and remove the batch stock using IDOC or BAPI again.
    Thanks and regards,
    Polly

  • Problem with Finder and Menu Fonts (uppercase A)

    Hello --
    I'm having a problem with fonts. All the characters that appear under icons in the Finder or in the menu for any application appear as uppercase As with boxes around them. There appears to be one uppercase A for each character that should be there. If I click-pause-click to edit the filename in the Finder, the text appears normal during the duration of the change, and then reverts to uppercase A with a box around it again. All other operation of the computer is normal.
    I was watching and downloading video files in iTunes when the problem appeared. When I pressed ESC to exit full-screen mode, the Finder said that my start-up disk was almost full, and I saw the font problem. Upon investigating, I discovered that my start-up disk was completely full (and the download had failed), so the first thing I did was move some video files to an external drive, which freed about 5 GB.
    Since freeing the space, I've tried the following to fix it, in this order:
    1. booted from Tiger CD to run Repair Disk from Disk Utility
    2. rebooted from the boot hard drive to run Repair Disk Permissions from Disk Utility
    3. run through Disk Warrior
    4. created a test admin user and logged in as that user
    5. removed font cache files using terminal
    6. booted in safe mode, logged in as myself, and then rebooted normally
    None of these actions has had any effect. The computer is still operating normally, except for the characters that don't display correctly.
    I'm running 10.4.6 on a Titanium Powerbook 500 MHz with 512MB RAM. A few months ago, I replaced the internal hard drive with an 80GB Seagate.
    Tibook 500   Mac OS X (10.4.6)  

    Hi again, zoobieboots —
    I appreciate your initiating a new thread. Your post here helps to make the situation much clearer than in bmewolf's thread — particularly in terms of what you've already tried. Thanks again.
    A few initial thoughts —
        (a) As I was trying to suggest previously, you're apparently operating (after moving some files to an external drive) with ~6-10% (?) free disk space. Particularly given that you were working with large video files when this appeared, File fragmentation would be expected. While I haven't heard of this particular symptom resulting from fragmentation, that would be a concern to me — particularly since this immediately preceded the problematic behavior.
    I've read some good reports about iDefrag, but haven't used it myself. A demo version is apparently available for HDs < 100GB. But you'd presumably need to free significantly more space first (you haven't actually said whether 5GB or ?? is the total available now). Having never experienced severe fragmentation, I don't fully understand its consequences — but another participant may be able to explain this.
        <b>(b) You don't mention trying to troubleshoot potentially corrupt or incompatible fonts (or font caches), also as outlined in the other thread. As I suggested there, The X Lab's "undoing Font Book" FAQ is a useful resource in this.
        (c) Although I agree it may be an unsatisfying "solution," an Archive & Install did work for bmewolf in the case that you've indicated matches yours closely.
    I hope one of these suggestions is helpful. Please post back to discuss your progress.
    Regards,
    Dean

  • Re: Fwd: Link Problems With Borland C++ 4.52

    I have seen this problem before in another context, and I'll offer the
    cause and solution in the hope that they will apply to the Crystal problem.
    Many Windows based applications rely on PASCAL calling conventions, which
    change the way parameters are handled in function/method calls. They
    indicate this by placing one of the following immediately before the
    function name in the prototype declarations:
    - pascal_far (or something like that)
    - WINAPI
    - some other typedef of either of the above
    For example:
    int WINAPI AddTotal(int valueA, int valueB);
    Unfortunately, v2.0 of Forte does not provide any mechanisms for changing
    the calling conventions of the prototypes in the generated C++ wrapper
    library, so when you compile that code, the linker fails. I think that the
    compiler may generate different symbols depending on calling conventions,
    so that's why it fails.
    To fix this, don't autocompile your code, but generate the distribution, go
    into the generated C++ files and look for the function prototypes (I think
    you can search for FORTE_NO_PROTOTYPES), add WINAPI to the appropriate
    places in the prototype definitions (see above) and use fcompile to build
    the library. Instructions for fcompile are in the Interfacing With
    External Systems manual.
    Hope this helps,
    James
    At 11:05 AM 5/29/97 PDT, you wrote:
    >
    We are trying to wrapper Crystal Reports from Forte. I know that there
    are a number of other people in this same boat, as I've seen messages
    posted here at various points during the past few weeks. We are having
    a particular problem with getting the compile to go through, which we
    have sent in to Forte Tech Support. I'm forwarding the message I sent
    Tech Support to this group in the hopes that someone here may have
    already seen and resolved a similar problem.
    Thanks in advance for any help you can offer!
    Dale V. Georg
    Indus Consultancy Services [email protected]
    Mack Trucks, Inc. [email protected]
    >
    Date: Wed, 28 May 97 13:47:20 PDT
    From: dg7077a
    To: Forte Technical Support
    Cc: Gardner, Steve
    Subject: Link Problems With Borland C++ 4.52
    Name of requestor: [Dale V. Georg / Alaiah Chandrashekar]
    Company: [Indus Consultancy Services]
    Phone for callback: [(610) 709-3956]
    Customer Site: [Mack Trucks, Inc.]
    Product: [Forte]
    Version of Forte: [2.0.H.1]
    Server OS: [SunOS 5.5.1]
    Client OS: [Windows 3.1]
    DBMS: [Oracle 7.2.3]
    Reproducible?: [Yes]
    Brief description: [Link Problems With Borland C++ 4.52]
    Complete description of problem or question:
    We are attempting to write a C-wrapper interface from Forte to Crystal
    Reports' Report Engine. We are using Borland C++ version 4.52.
    Unfortunately, we have been unable to get a clean compile after a day
    and half of effort. We get as far as the link stage of the
    compilation, and
    the compiler aborts with an "Unknown symbol" error message for each
    of the functions we are trying to wrapper. We have tried a number of
    ideas to fix this problem, and are continuing to try to solve it on
    our own,
    but any help would be greatly appreciated. Please have someone call
    Alaiah Chandrashekar at the number above as soon as possible.
    Thanks!
    Dale V. Georg
    Indus Consultancy Services [email protected]
    Mack Trucks, Inc. [email protected]
    James Urquhart [email protected]
    Product Manager phone: (510) 986-3513
    Forte Software, Inc. fax: (510) 869-2092

    James,
    Thanks for your quick response. Yesterday we had been running down
    the path of examining the calling conventions and trying to change them
    to PASCAL, but without much success. After receiving your note, we
    went back over it again, and this time we were able to finally to piece it
    together. In addition to editing the Forte-generated .cc file to declare
    the functions as PASCAL, we also had to turn off the compiler's case
    sensitivity. (The Crystal .lib file had the function names in mixed case,
    but the Borland compiler was generating all uppercase for the names.)
    Now I had actually tried this yesterday and it didn't work (in fact it
    generated a whole bunch of new errors) - because until we took a
    second look at it today, I didn't realize that Borland's linker actually has
    TWO flags that control case sensitivity. If you only turn one or the
    other off, things can get pretty ugly looking. As soon as we turned
    both of them off, the compile and link went beautifully. Again, thanks
    for your help; hopefully we are over the worst of it now!
    Dale
    I have seen this problem before in another context, and I'll offer the
    cause and solution in the hope that they will apply to the Crystalproblem.
    >
    Many Windows based applications rely on PASCAL callingconventions, which
    change the way parameters are handled in function/method calls.They
    indicate this by placing one of the following immediately before the
    function name in the prototype declarations:
    - pascal_far (or something like that)
    - WINAPI
    - some other typedef of either of the above
    For example:
    int WINAPI AddTotal(int valueA, int valueB);
    Unfortunately, v2.0 of Forte does not provide any mechanisms forchanging
    the calling conventions of the prototypes in the generated C++wrapper
    library, so when you compile that code, the linker fails. I think thatthe
    compiler may generate different symbols depending on callingconventions,
    so that's why it fails.
    To fix this, don't autocompile your code, but generate thedistribution, go
    into the generated C++ files and look for the function prototypes (I think
    you can search for FORTE_NO_PROTOTYPES), add WINAPI tothe appropriate
    places in the prototype definitions (see above) and use fcompile tobuild
    the library. Instructions for fcompile are in the Interfacing With
    External Systems manual.
    Hope this helps,
    James
    At 11:05 AM 5/29/97 PDT, you wrote:
    We are trying to wrapper Crystal Reports from Forte. I know that
    there
    are a number of other people in this same boat, as I've seenmessages
    posted here at various points during the past few weeks. We arehaving
    a particular problem with getting the compile to go through, whichwe
    have sent in to Forte Tech Support. I'm forwarding the message Isent
    Tech Support to this group in the hopes that someone here mayhave
    already seen and resolved a similar problem.
    Thanks in advance for any help you can offer!
    Dale V. Georg
    Indus Consultancy Services [email protected]
    Mack Trucks, Inc.
    [email protected]
    >
    >>
    Date: Wed, 28 May 97 13:47:20 PDT
    From: dg7077a
    To: Forte Technical Support
    Cc: Gardner, Steve
    Subject: Link Problems With Borland C++ 4.52
    Name of requestor: [Dale V. Georg / AlaiahChandrashekar
    Company: [Indus Consultancy Services]
    Phone for callback: [(610) 709-3956]
    Customer Site: [Mack Trucks, Inc.]
    Product: [Forte]
    Version of Forte: [2.0.H.1]
    Server OS: [SunOS 5.5.1]
    Client OS: [Windows 3.1]
    DBMS: [Oracle 7.2.3]
    Reproducible?: [Yes]
    Brief description: [Link Problems With Borland C++ 4.52]
    Complete description of problem or question:
    We are attempting to write a C-wrapper interface from Forte to
    Crystal
    >>
    Reports' Report Engine. We are using Borland C++ version 4.52.
    Unfortunately, we have been unable to get a clean compile after aday
    and half of effort. We get as far as the link stage of the
    compilation, and
    the compiler aborts with an "Unknown symbol" error message foreach
    of the functions we are trying to wrapper. We have tried a numberof
    ideas to fix this problem, and are continuing to try to solve it on
    our own,
    but any help would be greatly appreciated. Please have someonecall
    Alaiah Chandrashekar at the number above as soon as possible.
    Thanks!
    Dale V. Georg
    Indus Consultancy Services [email protected]
    Mack Trucks, [email protected]
    James Urquhart [email protected]
    Product Manager phone: (510) 986-3513
    Forte Software, Inc. fax: (510) 869-2092-----------------------------------------------------------------------------------
    Dale V. Georg
    Indus Consultancy Services [email protected]
    Mack Trucks, Inc. [email protected]
    [email protected]------------------

  • Problem with ORACLE database

    Hi all,
    I am facing some problem with ORACLE database while configuring one JDBC scenario in the receiver side. I have configured one JDBC scenario like FILE TO JDBC. As JDBC is at receiver side i have provided the input file with the following format ,
    <root>
      <StatementName1>
         <dbTableName action="INSERT">
             <table>employee</table>
              <access>
                    <flag>NO</flag> 
                    <ID>567</ID>
             <NAME>134</NAME>
                 </access>
         </dbTableName>
      </StatementName1>
    </root>
    But in the ORACLE database all my columns are in the uppercase.
    So when i have tried to send this input file to process through JDBC receiver side then i have faced the below error :
    FATAL ERROR: Column 'flag' does not exist in table 'employee'
    Then I have tried to check with sender side processing of JDBC adapter. By using the SQL statements as
    SELECT * FROM EMPLOYEE WHERE flag='NO'
    UPDATE EMPLOYEE SET Flag='YES'  WHERE flag='NO'
    Here it worked fine.
    Now my question is,
    If the same adapter is working when we are writing a query directly(sender side), then we must also allow case independence in the auto generated SQL part(receiver side).
    The JDBC drivers for both SQL server and Oracle, supports the same java code, for accessing the DB, irrespective of the case of the column names.
    Please clarify this doubt as soon as possible.
    Thanks,
    Soorya.

    Hi Dharmaveer,
    When I go with the following input file,
    <root>
      <StatementName1>
         <dbTableName action="INSERT">
             <table>EMPLOYEE</table>
              <access>
                    <FLAG>NO</FLAG> 
                    <ID>666</ID>
                    <NAME>SSS</NAME>
                 </access>
             </dbTableName>
      </StatementName1>
    </root>
    I will get the following query with succesfull processing.
    INSERT INTO  EMPLOYEE (FLAG, ID, NAME) VALUES (NO, 666, SSS)
    when i go with this input file,
    <root>
      <StatementName1>
         <dbTableName action="INSERT">
             <table>EMPLOYEE</table>
              <access>
                                    <flag>NO</flag> 
                                   <ID>777</ID>
                        <NAME>TTTT</NAME>
                        </access>
                   </dbTableName>
      </StatementName1>
    </root>
    Then i am facing this problem,
    Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'EMPLOYEE' (structure 'StatementName1'): java.sql.SQLException: FATAL ERROR: Column 'flag' does not exist in table 'EMPLOYEE'
    Here I cant get any SQL statement as it is not successfull.
    I have gone through your link but it also says to modify the column in the input file which is not possible for me. Can you please help me in this regard?
    Thanks,
    Soorya

  • Search and find jpg files with uppercase extension

    Macbook pro 13 inch retina display with OS X Yosemite.
    Some of the images I'm working on are being saved with all uppercase extension .JPG.
    My questions is:
    1) Does anyone know why this is happening?
    2) Is there a way to search all the files that have the uppercase extension .JPG?
    3) How could I change all the files with uppercase extension .JPG either individually or batch all the files automatically?
    4) Is there a way to have my files saved with the normal lowercase .jpg extension for future files?
    Thank you.

    Which program are you using to edit your jpeg images?
    On a normal Mac with HFS Journaled disk format, there is not any difference with upper case or lower case file names - only if you have formatted the disk as a "HFS Journaled Case Sensitive" can you have two files that differ only in case. For example on a disk with normal formatting, if you had a file called abc.jpg you could not create another file called abc.JPG (you will get an error if you try), but on a disk that was formatted as HFS Journaled Case Sensitive you could have both files.
    So in your case the upper case files would be opened if you typed in the lower or upper case name.
    Do you have a few files with this upper case issue or lots?
    If you have only a few just rename them in Finder (Yosemite Finder now has a nice rename feature) - just highlight all the files you want to rename then right-click or control-click and select the item in the options dialog that appears named "Rename xx items" where xx is the number of items you had highlighted.
    If you have a lot let me know and will tell you a different way that is easier but involves using the command line in Terminal.
    Is it possible you accidentally had the caps lock key pressed when you typed in a name? In any event it doesn't really matter how they got the upper case name, simply changing the names to lower case should fix the problem so that it doesn't happen again.

  • Problem with accessing apex_collection data

    Hello,
    I got a problem with a apex_collection. I'm trying to fill this collection within a loop threw a database-cursor. It's part of a process (on load - before header). It looks like following:
    loop
        FETCH curs_1 INTO l_key;
        EXIT WHEN curs_1%NOTFOUND;
        select v.name, p.price
        into l_name, l_price
        from table_1 v, table_2 p
        where v.key = l_key
        and p.fkey = v.key;
        APEX_COLLECTION.ADD_MEMBER(p_collection_name => 'temp_collection',
                                       p_c001            => to_char(l_key),
                                       p_c002            => l_name,
                                       p_c003            => to_char(l_price));
       l_temp := l_temp||l_name||chr(10);
    end loop;As you can see I'm filling a temporary variable (l_temp). When I display this variable within an element it shows the correct values. But when i make a select on the collection there is no data found in the report. The report is at the same page as the process. Query for the report is:
    SELECT c001, c002
       FROM APEX_collections
    WHERE collection_name = 'temp_collection'I hope somebody can help.
    Thank you in advance
    Sebastian

    All collection names are allways UPPERCASE. If you use lowercase, it will not find it and no error message will be issued.
    Denes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.opal-consulting.de/training
    http://apex.oracle.com/pls/otn/f?p=31517:1
    ------------------------------------------------------------------------------

  • Problem with read() mehtod!Help please...

    Hi guys..please help me with this simple stuff...these small program will display the the character count in a word...example: a=4,b=6.....here's my code...
    mport java.io.*;
    public class BufferedReaderTest {
    public static void main(String args[]) throws Exception {
    char[] capital = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'N',
    'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    FileReader fr = new FileReader("watu.txt");
    BufferedReader buffer = new BufferedReader(fr);
    String inString;
    while ((inString = buffer.readLine()) !=null) {
    String upperCase = inString.toUpperCase();
    System.out.println(upperCase);
    int nextChar;
    char ch;
    int count=0;
    for (int i = 0; i < 26; i++)
    while ( (nextChar = inString.read() ) != -1 ) ***problem with this line**
    ch = (char) nextChar;
    if( ch== capital)
    count++;
    System.out.print(" " + capital[i]);
    System.out.println(" " + count);
    fr.close();

    Hi guys..please help me with this simple
    stuff...these small program will display the the
    character count in a word...example:
    For future postings please:
    - use code tags (see: http://forum.java.sun.com/help.jspa?sec=formatting)
    - always provide the compiler (and/or runtime) errors.
    Your problem is this:inString.read(). String has no method called read().
    To loop through a String and check it's contents line by line you could use a for-statement and String's charAt(int) method.
    Here's how to use the for-statement:
    http://java.sun.com/docs/books/tutorial/java/nutsandbolts/for.html
    Good luck.

  • Problem with case sensitivity 7.3.4

    Hi,
    We are having a problem with JDBC being unable to handle a lower
    case on a SQL statement execution. For eg: Like '%S%' works but
    not '%s%'.
    Any suggestions
    Thanks,
    Ganesh
    null

    Hi Ganesh,
    it's not a jdbc problem. when u try to query
    using matches (%'s), it looks for exact match.
    u can Compare the values by converting them
    to uppercase using to_upper.
    ex: where to_upper(table_field_name) = to_upper('%
    ur_string_value%') ...
    ATB
    MohanE
    Ganesh (guest) wrote:
    : Hi,
    : We are having a problem with JDBC being unable to handle a
    lower
    : case on a SQL statement execution. For eg: Like '%S%' works
    but
    : not '%s%'.
    : Any suggestions
    : Thanks,
    : Ganesh
    null

  • Avelsieve error with uppercase shortname

    I have a mailserver with the avelsieve plugin.
    The avelsieve-installation works with all users, which have a lowercase shortname.
    If a user has a uppercase shortname (e.g. AK) webmail gives me the timesieve error.
    Can I change the shortname to lowercase or is there a workaround for this problem?
    kind regards
    Robert

    I have solved the problem.
    I changed the first shortname with uppercase to lowercase (eg. from AK to ak).
    In WGM you must change the uid in inspector.
    Thanks for your replies
    Robert

  • 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

  • How do i delete a device from my apple id

    how do i delete a device from my apple id?

  • Set default password for all users including csv file

    I would like to set the default password for all users including the ones imported in the csv file? Also now the default passwrd in set to the email address. How do i change that setting to the "login" setting in the csv file so those users can loin

  • How do I restore QT Pro?

    I just finished re-installing my system and realized that I did not save my QT Pro information, but it has been backed up in my time machine backups. So, my question is how can I go into my backups and bring QT back to the way it was prior to my re-i

  • Generate & using Javascript in custom Tag

    Hi everyone, I'm developing a custom tag to create a treeview from a TreeModel. I've got a script found on the web which uses a few javascripts file. My question is : How do i have to use my javascripts file ? Do i have to just import the javascipt f

  • Cannot seed a new database copy

    I am setting up databases on a 3-node DAG.  I had created one database (DB1) and put copies of it on the other two servers, then I received and configured additional disk space and wanted to move the database to that. I was able to create a new datab