Como subistituir uma string com um emoji [ :), :(, :o, etc] por uma imagem guardada em um pacote do projeto

Olá a todos, eu já pesquisei muito a respeito, e sei que tem tópicos parecidos com minha dúvida, porem não consegui de jeito nenhum resolver isto! Em meio a essas várias pesquisas que fiz consegui montar um ouvinte para o JTextPane do meu chat socket, esse ouvinte tem um HashTable de caracters emojis, e também uma estrutura que analisa o que foi inserido no JTextPane, tenho uma imagem chamada “smile.png” guarada em um packager chamado “emoticons”, preciso que quando o usuário digitar “:)” ou qualquer outro emoji da HashTable, essa string seja substituida pela imagem correspondente (ainda tenho que colocar mais emojis na pasta), a única forma que deu certo uma vez foi com um código que analisa somente a string “:)” e substitui por uma imageicon desenhada no próprio código usando paintComponete do Graphics2D, e isso não é o ideal pra mim (até por que não sei desenhar emoji nenhum por esse método).

O código:
obs: o nome do meu JTextPane é “textPane”.

public void append(String s) {
		try {
			Document doc = textPane.getDocument();
			Style style  = textPane.addStyle("Style", null);


			if (s.equals("Menssage privada para: " + msg.getNomeReservado() + "\n")) {
				StyleConstants.setForeground(style, Color.RED);

			} else if (s.equals("Fim da menssagem privada.\n")) {
				StyleConstants.setForeground(style, Color.RED);

			} else if (s.equals("Menssagem privada de " + nome + ":\n")) {
				StyleConstants.setForeground(style, Color.RED);
			}

            int offset = doc.getLength();
            doc.insertString(doc.getLength(), s, style); 

            java.util.Hashtable emoticons = new java.util.Hashtable();
            emoticons.put(":P", "belat");
            emoticons.put(":D", "biggrin");
            emoticons.put(":}", "blush");
            emoticons.put(":$", "confused");
            emoticons.put("B)", "cool");
            emoticons.put(":'(", "cry");
            emoticons.put(":O", "eek");
            emoticons.put(":(", "frown");
            emoticons.put("%)", "funky");
            emoticons.put(">|", "mad");
            emoticons.put(":|", "muted");
            emoticons.put(":/", "sarcastic");
            emoticons.put(":)", "smile");
            emoticons.put(";)", "wink");

            for (java.util.Enumeration e=emoticons.keys(); e.hasMoreElements();) 
            {
               String symbol = e.nextElement().toString();
               String icon   = emoticons.get(symbol).toString();

               while (true){
            	   
                  s= doc.getText(offset, s.length());
                  int pos = s.indexOf(symbol);
                  
                  if (pos < 0) 
                	  break;
                  
                  StyleConstants.setIcon(style, new ImageIcon("file:///C:/Users/Matheus/eclipse-workspace/aps5pCliente/src/com/aps/app/emoticons/"+icon+".png"));
                  doc.insertString(offset + pos, ".", style);
                  doc.remove(offset + pos + 1, symbol.length());
               }
            }
						
			/* textPane.setText("<IMG SRC="+
			"\"file:///C:/Users/Matheus/eclipse-workspace/aps5pCliente/src/com/aps/app/emoticons/smile.png\""+
			"WIDTH=\"20\" HEIGHT=\"20\"> ");*/
			
		this.textPane.setCaretPosition(doc.getLength());

	}catch(BadLocationException exc){
		exc.printStackTrace();
	}
	}

Porém, quando eu digito “:)” a string é apagada mas a imagem não é inserida, apenas fica vazio onde deveria ter uma imagem!
Alguém sabe como resolver isso, ou alguma outra técnica de se fazer essa troca? Agradeço a atenção desde já!