Я раньше следовал, "это зависит" тенденция, пока я не понял, что непротиворечивость, однородность и простота более важны, чем экономить усилия для создания файла, и что "стандарты хороши, даже когда они плохи".
то, Что я имею в виду, следующее: a. пара cpp/.h файлов в значительной степени, что все "модули" заканчиваются так или иначе. Создание существующего из требования сохраняет много беспорядка и плохой разработки.
, Например, когда я вижу некоторый интерфейс чего-то в заголовочном файле, я знаю точно, где искать / помещают его реализацию. С другой стороны, если я должен представить интерфейс чего-то, что было ранее скрыто в .cpp файле (например, статическая функция, становящаяся глобальной), я знаю точно, куда поместить его.
я видел слишком много плохих последствий не после этого простого правила. Ненужные подставляемые функции, повреждая любой вид правил об инкапсуляции, (не) разделении интерфейса и реализации, положили код не на место, для именования некоторых - все вследствие того, что соответствующий одноуровневый заголовок или cpp файл никогда не добавлялись.
Так: всегда определяйте и.h и.c файлы. Сделайте это стандартом, следуйте, это, и безопасно полагается на него. Жизнь намного более проста этот путь, и простота самая важная вещь в программном обеспечении.
This basically means 2 things,
I suspect it's #1. Double check your password. Try if you can list the key in keytool with the same password.
В строке ks.getEntry вы даете ему пароль магазина. Вместо этого должен быть ключевой пароль. Замените строку на эту, и она будет работать:
char[] keypwd = "abcdtest".toCharArray();
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) ks.getEntry("business2", new KeyStore.PasswordProtection(keypwd));