Vejo que algumas soluções foram fornecidas, mas nenhuma causa, por isso explicarei isso em detalhes, pois acredito que é tão importante saber o que você estava fazendo de errado que apenas obter "algo" que funcione a partir das respostas fornecidas.
Primeiro, vamos ver o que a Oracle tem a dizer
* <p>The returned array will be "safe" in that no references to it are
* maintained by this list. (In other words, this method must
* allocate a new array even if this list is backed by an array).
* The caller is thus free to modify the returned array.
Pode não parecer importante, mas como você verá, é ... Então, o que a linha a seguir falha? Todos os objetos da lista são String, mas não os convertem, por quê?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Provavelmente, muitos de vocês pensariam que esse código está fazendo o mesmo, mas não o faz.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Quando, na realidade, o código escrito está fazendo algo assim. O javadoc está dizendo isso! Instará uma nova matriz, o que será dos objetos !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Então tList.toArray está instanciando um Objetos e não Strings ...
Portanto, a solução natural que não foi mencionada neste segmento, mas é o que a Oracle recomenda é a seguinte
String tArray[] = tList.toArray(new String[0]);
Espero que esteja claro o suficiente.