I have written a program in Java which creates old-school paper wallets. Therefore I am almost certain of the source code's validity.
Unless you made a mistake somewhere, and the random isn't as random as you think.
However, I believe it is much easier to use an airgapped device for signing transactions.
Of course

Having a dedicated system for offline signing is easier than getting one each time you need it. And if you have said system already, it's easy to import a paper wallet when you need it.
I like to use a wide variety of wallets, depending on my needs at the moment.