Цель
Я настраиваю приложение для личного использования. Это приложение может создавать множество миди-файлов на Java.
Я хочу сохранить много объектов одновременно в JList на Java. Теперь я могу сохранить только 1 файл одновременно.
Пожалуйста, объясните мне, почему я не могу сохранить много файлов одновременно в моей идее шнура ниже.
Проблемы
Сообщение об ошибке отсутствует. Но я не могу сохранить файлы, если когда я изменил код. нигде не могу найти файлы.
Моя идея
(Помещение)
- Это приложение использует JList и JFilechooser.
- Я проверил и нашел действие сохранения файлов из всех классов.
- Я уже изменил детали JFileChooser. Теперь я могу использовать множественный выбор.
(Резюме моей идеи)
Я использую Files[]
. Я изменился, чтобы быть многократным, как это.
File xxxxx = getSelectedFile()
File[] yyyyy = getSelectedFiles()
Исходный код
(Исходный код)
/**
* Save Files Action
*/
public Action saveMidiFileAction = getModel().new SelectedSequenceAction(
"Save",
"Save selected MIDI sequence to file"
) {
@Override
public void actionPerformed(ActionEvent event) {
PlaylistTableModel playlistModel = getModel();
SequenceTrackListTableModel sequenceModel = playlistModel.getSelectedSequenceModel();
String fn = sequenceModel.getFilename();
if( fn != null && ! fn.isEmpty() ) setSelectedFile(new File(fn));
if( showSaveDialog((Component)event.getSource()) != JFileChooser.APPROVE_OPTION ) return;
File f = getSelectedFile();
if( f.exists() ) {
fn = f.getName();
if( ! confirm("Overwrite " + fn + " ?\n" + fn + " is OK?") ) return;
}
try ( FileOutputStream out = new FileOutputStream(f) ) {
out.write(sequenceModel.getMIDIdata());
sequenceModel.setModified(false);
playlistModel.fireSequenceModified(sequenceModel, false);
}
catch( IOException ex ) {
ex.printStackTrace();
showError( ex.getMessage() );
}
}
};
(Моя идея)
/**
* Save Files Action
*/
public Action saveMidiFileAction = getModel().new SelectedSequenceAction(
"Save",
"Save selected MIDI sequence to file"
) {
@Override
public void actionPerformed(ActionEvent event) {
PlaylistTableModel playlistModel = getModel();
SequenceTrackListTableModel sequenceModel = playlistModel.getSelectedSequenceModel();
String fn = sequenceModel.getFilename();
if( fn != null && ! fn.isEmpty() ) setSelectedFile(new File(fn));
if( showSaveDialog((Component)event.getSource()) != JFileChooser.APPROVE_OPTION ) return;
File[] f = getSelectedFiles();
for (int i = 0; i < f.length; i++) {
if( f[i].exists() ) {
fn = f[i].getName();
if( ! confirm("Overwrite " + fn + " ?\n" + fn + " is OK?") ) return;
}
try ( FileOutputStream out = new FileOutputStream(f[i]) ) {
out.write(sequenceModel.getMIDIdata());
sequenceModel.setModified(false);
playlistModel.fireSequenceModified(sequenceModel, false);
}
catch( IOException ex ) {
ex.printStackTrace();
showError( ex.getMessage() );
}
}
}
};
```
Если мне нужно добавить подробную информацию о нижеуказанных пунктах, я напишу об этом. Но я думаю, что это не так важно сейчас.
PlaylistTableModel.java
SequenceTrackListTableModel.java
.setModified.java
.fireSequenceModified.java
P.S.
Я мог бы быть не так хорош с Java
.
getSelectedFiles()
. Действительно ли оно больше 1? Цикл for выполняется несколько раз? Попробуйте отладить ваше приложение, чтобы вы знали, что на самом деле происходит под капотом. - person MC Emperor   schedule 26.04.2017