Аргумент TypeError: write () должен быть str, а не PilImage
blockquote>Это указывает на то, что
img
имеет типPilImage
, тогда вы можете использовать способ сохранения aPilImage
, чтобы сохранить его. Например,img.save(path_qr_code)
Википедия имеет хороший обзор Собственный Интерфейс Java , по существу это позволяет коммуникацию между Java и собственными библиотеками операционной системы, записанными на других языках.
JNI глобальные ссылки подвержены утечкам памяти, поскольку они автоматически не собраны "мусор", и программист должен явно освободить их. Если Вы не пишете, что любой JNI кодирует себя, возможно, что библиотека, которой Вы пользуетесь, имеет утечку памяти.
редактирование здесь является немного большим количеством информации о локальном по сравнению с глобальными ссылками, и почему глобальные ссылки используются (и как они должны быть освобождены)
Глобальная ссылка JNI - это ссылка из «родного» кода на объект Java, управляемый сборщиком мусора Java. Его целью является предотвращение сбора объекта, который все еще используется нативным кодом, но, похоже, не содержит живых ссылок в коде Java.
JFrame представляет собой java.awt.Window
и связан с «собственным» объектом Window. Когда вы закончите работу с конкретным экземпляром JFrame, вы должны вызвать его метод dispose()
для очистки.
Я не уверен, создает ли какой-либо нативный код глобальную ссылку на JFrame, но это кажется вероятным. Если это произойдет, это предотвратит сборку мусора JFrame. Если вы создаете много окон (или подклассов) и видите, что они никогда не собираются, убедитесь, что они удалены.