Текущий проект, в котором я работаю, создает файл журнала с использованием библиотеки log4j
, а также должен иметь функцию «showLog», которая создает фрейм, в котором можно просматривать журнал.Кроме того, этот кадр должен обновляться при изменении файла журнала (добавление нового сообщения журнала).
Ну, я сделал все, кроме действия обновления, и это вопрос, как я могудинамически обновлять?
Здесь фрагменты моего кода, я помещаю только соответствующие строки:
Действие интерфейса: запускает действия события
public interface Action {
public void executer();
}
Class CadreTexte: Создает и управляет фреймом, в котором отображается файл журнала
public class CadreTexte extends JFrame {
private JTextPane log;
public CadreTexte(String titre, File texte) {
super(titre);
if (texte.exists() && texte.canRead()) {
this.texte = texte;
}
else {
throw new ExceptionGenerateurs("NE_FILE"); //Own exception
}
initializeFrame();<br>
log= new JTextPane();
log.setEditable(false);
java.net.URL urlFichier = null;
try {
urlFichier = texte.toURI().toURL();
} catch (MalformedURLException e1) {
throw new ExceptionGenerateurs("Fichier de texte non montrable");
}
try {
log.setPage(urlFichier);
}
catch (IOException e) {
System.out.println(e.getLocalizedMessage()); //CATCH
} finally {
urlFichier = null;
}
JScrollPane docSP = setScrollPane(); // bars as needed, contains JTextPane
getContentPane().setLayout(new BorderLayout());
getContentPane().add(docSP,BorderLayout.CENTER);
}
}
Class Vue: основной фрейм.Он содержит список объектов Action, которые хранятся в HashMap.Действия доступны через меню.Поскольку этот класс очень большой, я ставлю только самые важные строки:
ActionPerformed Function:
public void actionPerformed(ActionEvent e) {
JComponent composant;
Action handler;
composant = (JComponent) e.getSource();
String idEvenement = composant.getName();
modele.log(Modele.LOG_DEBUG, String.format("Événement. ID: %s",idEvenement));
handler = ACTIONS_MAP.get(idEvenement);
if (handler == null) {
modele.log(Modele.LOG_ERROR, "Action non identifiée");
} else {
handler.executer();
modele.log(Modele.LOG_DEBUG, "Fin action");
}
}
ActionvisualiserLog:
Action visualiserLog = new Action() {
public void executer() {
if (cadreLog == null) {
cadreLog = new CadreTexte("Fichier du log", model.getLogFile());
visuLog = true;
}
else {
visuLog = !visuLog;
}
cadreLog.visualiser(visuLog);
}
};
Наконец, MenuItem, который активирует действие visualiserLog, это JCheckBoxMenuItem
Я надеюсь, что вы можете помочь мне послепонять этот большой вопрос.Если кому-то нужна дополнительная информация, попросите ее!
С уважением!
ПРИМЕЧАНИЕ. Я был бы очень признателен, если бы кто-то смог отредактировать и дать правильный формат вопроса, я боролся средактор и он меня побеждает = (