Well from a structure standpoint I suggest this:
Have the object of your LoaderClass in your Main or Game or whatever you call it class. When you first start the game switch the game state to “loading” (Just use enums. Even a small bit gamestate management code makes doing that kind of stuff a lot more organized.) and create the window for the progress bar. Then, set your variables, eg
Image player = new ImageIcon("player.png").getImage();
and then after that add a bit to the number that defines how far the loading bar has progressed.
To make this more dynamic, what I usually like to do is keep and my images all in an array, or sets of arrays.
Image[] weapons;
Image[] players;
Image[] mobs;
This way it makes it nice and easy to load from tile sets.
Also, you can make your progress bar progress based on the loading of these easily, which is really the whole point.
BufferedImage weaponTileset = {Load the tileset into BI};
for(Image img : weapons){
img = {If each tile is, say, 10x10 then progress 10 pixels down the BI and load this image into a 10x10 piece from that point.}
progressBar.add(1);
}
Of course you probably wouldn’t add one to the progress bar. Just play around with some math and get it to add to the progress bar based on how many things you have to load.