Если вы построили Python из исходного кода, это зависит только от зависимостей: поскольку вы пропустили OpenSSL lib, python молча завершил установку модуля _ssl. Вы можете увидеть его в финальном отчете команды make:
Python build finished, but the necessary bits to build these modules were not found:
_bsddb _sqlite3 _ssl
_tkinter bsddb185 dbm
dl gdbm imageop
sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
Установка OpenSSL lib в любом из стандартных путей библиотеки (/usr/lib
, /usr/local/lib
...) должна сделать трюк. Во всяком случае, так я и сделал: -)
Squiddie в комментариях рекомендует вам хорошее решение. Однако, если вы все еще хотите отключить текстовое поле, чтобы имя файла было видно пользователю (в случае JFileChooser.DIRECTORIES_ONLY это , а не ), вы можете использовать следующий код, чтобы «захватить» текстовое поле. от выбора и отключить его.
import java.awt.Component;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TextFieldFromFileChooser {
public TextFieldFromFileChooser() {
JFileChooser chooser = new JFileChooser();
JTextField fileChooserTextField = getFileChooserTextField(chooser);
fileChooserTextField.setText("I name this file.txt");
fileChooserTextField.setEditable(false);
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
// Selected file has the name of the fileChooserTextField' text
System.out.println(chooser.getSelectedFile().getAbsolutePath());
}
}
private static JTextField getFileChooserTextField(JFileChooser chooser) {
JTextField f = null;
for (Component c : getComponents(chooser)) {
if (c instanceof JTextField){
f = (JTextField) c;
break;
}
}
return f;
}
private static List<Component> getComponents(JComponent component) {
List<Component> list = new ArrayList<>();
for (Component c : component.getComponents()) {
if (c instanceof JPanel)
list.addAll(getComponents((JPanel) c));
else if (c instanceof JTextField)
list.add((JTextField) c);
}
return list;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new TextFieldFromFileChooser());
}
}
Обратите внимание, что это было протестировано с Windows LAF и Java LAF. Если у вашего выбора есть 2 текстовых поля (я понятия не имею, как обстоят дела с MAC / Linux), у вас могут возникнуть проблемы, потому что вы не знаете, какие из текстовых полей вы отключаете.