Toon posts:

[Java] ResourceBundle Probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
ResourceBundles die dezelfde basisnaam hebben,
zouden van elkaar moeten overerven,
Dus als er bepaalde woorden niet in JMenuItemResourceBundle_en_DU staan dan gaat de bundle manager die zoeken in JMenuItemResourceBundle_en.
Dit mislukt dus,
als niet alle woorden in de en_DU staan, geeft hij een exceptie (kan geen resource vinden voor de opgegeven key) in plaats van in de _en te zoeken als er van taal wordt geswitched.

Iemand enig idee?

Java:
1
2
3
4
5
6
7
8
9
10
11
public class JMenuItemResourceBundle extends ListResourceBundle {
    protected static Object[][] contents;
        public JMenuItemResourceBundle()
        {
            super();
        }
        protected Object[][] getContents()
        {
            return contents;
        }
}


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class JMenuItemResourceBundle_en extends JMenuItemResourceBundle 
{
    public JMenuItemResourceBundle_en()
    {
            contents=new Object [2][2];
            contents[0][0]="New";
            contents[0][1]= new JMenuItemInternationalData("New","New",'N');            
            contents[1][0]="NewFromTemp";
            contents[1][1]= new JMenuItemInternationalData("Save","Save",'t');
            
    }

}



Java:
1
2
3
4
5
6
7
8
9
public class JMenuItemResourceBundle_en_DU extends JMenuItemResourceBundle {
    
    public JMenuItemResourceBundle_en_DU()
    {
                contents=new Object [1][2];
                contents[0][0]="New";
                                    contents[0][1]= new JMenuItemInternationalData("New","Nieuw",'N');  
}
}

  • Potatoman
  • Registratie: September 2000
  • Laatst online: 20-08 21:56

Potatoman

koniwa

In je du_en maak je van je contents een nieuwe object-array (oftewel je gebruikt niet het object uit je superclass).
Als je daar alleen je superconstructor aanroept, dan wordt ie in het engels geinitialiseerd, en kan je daarna zelf in de du_en class de waarden wijzigen zoveel je wilt :)

Edit: zo dus:

Java:
1
2
3
4
5
6
7
8
9
public class JMenuItemResourceBundle_en_DU extends JMenuItemResourceBundle {
    
    public JMenuItemResourceBundle_en_DU()
    {
                super();
                contents[0][0]="New";
                contents[0][1]= new JMenuItemInternationalData("New","Nieuw",'N');  
}
}

[ Voor 46% gewijzigd door Potatoman op 03-11-2003 17:29 ]

The cyclographing developer


Verwijderd

Topicstarter
Maar in de superklasse wordt dit Object array toch niet aangemaakt,
en dit kan toch ook niet want id superklasse kan je nog niet weten hoe groot die array zal moeten zijn, niet?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
protected static Object[][] contents; geeft zowel een declaratie als een definitie aan. Het Object[][] contents is vanaf daar een verwijzing naar null. contents wordt dus al gemaakt in JMenuItemResourceBundle en vervolgens ga je nieuwe arrays daarin toekennen in JMenuItemResourceBundle_en en in JMenuItemResourceBundle_en_DU overschrijf je die weer. Je wilt eigenlijk toevoegen aan die array, maar dat kan je niet omdat je de grootte ervan niet weet.

Daarom zou ik je willen adviseren om het java collections framework hiervoor te gebruiken. Daar is het namelijk voor ;) Jouw geval zou je kunnen oplossen met een ArrayList, wat een growing array is feitelijk, maar als ik je code zo bekijk dan wil je eigenlijk een Map gebruiken omdat je een key-value combinatie lijkt te simuleren. :)

Vertel eens meer over hoe je die array wilt gebruiken om in te zoeken bijvoorbeeld?

Verwijderd

Topicstarter
Wel,

ik zou dit als volgt willen gebruiken,
ResourceBundle.getBundle("naam van de resoucrbundle",LocaleSettings)

En in de manual lees ik dat enkel door de namen juist uit te kiezen ik de resourcebundles van mekaar kan laten overerven.
dus en_DU erft over van en, maar dit werkt niet.

Verwijderd

Topicstarter
Niemand een idee wat er fout gaat?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Tja, er is al aangegeven wat er mis is: Je overschrijft contents en daardoor kun je niet meer bij je orginele contents komen. Je zult contents dus moeten uitbreiden.

Naar ik kan zien bij de API moet je Object[][] gebruiken in plaats van een collection en moet je dus een copieerslag gaan houden. Of het echt moet, of dat je intern een collection kan gebruiken laat ik aan je over om te onderzoeken in de source (zie src.zip)

Maarja, stel dat de array uitgebreid moet worden, dan moeten we dus een nieuwe array maken die groter is, de oude data erin copieëren en dan de nieuwe data erbij stoppen. Zo ongeveer.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
public class JMenuItemResourceBundle_en_DU extends JMenuItemResourceBundle {
    
    public JMenuItemResourceBundle_en_DU()
    {
                int l_addition = 1;
                Object[][] l_contentsExtend = new Object[ contents.length + l_addition ][];
                System.arrayCopy( contents, 0, l_contentsExtend, 0, contents.length );
                l_contentsExtend[contents.length][0]="New";
                l_contentsExtend[contents.length][1]= new JMenuItemInternationalData("New","Nieuw",'N');
                contents = l_contentsExtend;
    }
}
Pagina: 1