【问题标题】:Embedding Log4j and AOP For Exception Logging In Java Swing Application [closed]在 Java Swing 应用程序中嵌入 Log4j 和 AOP 以记录异常
【发布时间】:2012-11-06 05:05:31
【问题描述】:

我正在使用 NetBeans 中的 Java Swing 为行业开发一个 ERP。我想记录使用log4J 引发的异常!和 AOP。我做了很多搜索,但没有得到 AOP 与基于 Swing 的应用程序的集成,因为大多数示例都是针对 web 框架工作(例如 Spring)。非常感谢提前。

【问题讨论】:

  • 你想注入你的记录器?
  • 正如@kriegaex 已经提到的:你的问题太宽泛了(投票结束)。请把它分解成一个具体的编码问题。
  • 我知道这是旧的,但仍列为未答复。如果它看起来合适,请您接受并支持我的回答吗?谢谢。
  • 请也给我投票,因为我也接受了你的回答并放弃了投票。

标签: java swing exception-handling log4j aop


【解决方案1】:

我看不到您的问题。 Swing 与否,您只是在使用 Java 类。如果您可以将AspectJ 应用于其他Java 类,您也可以将其应用于Swing 类。试一试吧,一旦您了解了基本概念,使用 AspectJ 的 AOP 就会非常有趣。如果您有具体问题,我很乐意为您提供帮助。


更新:好的,我刚刚有一些空闲时间,并使用了一些sample code 为您编写了一个快速演示。

最小的 Swing 示例抛出两个 RuntimeExceptions,一个在创建主窗口期间,另一个在您单击弹出对话框中的“确定”时:

import java.awt.event.*;
import javax.swing.*;

public final class MinimalSwingApplication {
    public static void main(String... aArgs) {
        MinimalSwingApplication app = new MinimalSwingApplication();
        app.buildAndDisplayGui();
    }

    private void buildAndDisplayGui() {
        JFrame frame = new JFrame("Main window");
        buildContent(frame);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private void buildContent(JFrame aFrame) {
        JPanel panel = new JPanel();
        panel.add(new JLabel("Hello"));
        JButton ok = new JButton("Show pop-up dialog");
        ok.addActionListener(new ShowDialog(aFrame));
        panel.add(ok);
        aFrame.getContentPane().add(panel);
        throw new RuntimeException("Oops!");
    }

    private static final class ShowDialog implements ActionListener {
        private JFrame fFrame;

        ShowDialog(JFrame aFrame) {
            fFrame = aFrame;
        }

        public void actionPerformed(ActionEvent aEvent) {
            JOptionPane.showMessageDialog(fFrame, "I am the a pop-up dialog");
            throw new RuntimeException("Something unexpected happened here");
        }
    }
}

记录异常的示例方面(使用 JDK 日志记录,但您可以轻松切换到 Log4J):

import java.util.logging.*;

public aspect SwingExceptionLogger {
    static Logger logger = Logger.getLogger(SwingExceptionLogger.class.getName());

    Object around() : execution(* MinimalSwingApplication..*(..)) {
        try {
            return proceed();
        } catch (Exception e) {
            logger.log(Level.WARNING, "Swing exception: " + e.getMessage());
            return null;
        }
    }
}

启动应用程序和两次打开/关闭弹出对话框的示例输出:

10.11.2012 09:42:28 MinimalSwingApplication buildContent_aroundBody5$advice
WARNUNG: Swing exception: Oops!
10.11.2012 09:42:33 MinimalSwingApplication$ShowDialog actionPerformed_aroundBody1$advice
WARNUNG: Swing exception: Something unexpected happened here
10.11.2012 09:42:37 MinimalSwingApplication$ShowDialog actionPerformed_aroundBody1$advice
WARNUNG: Swing exception: Something unexpected happened here

如果你想要的话,你总是可以优化切入点,只记录来自 AWT/Swing 线程的内容。您也可以重新抛出异常而不是吞下它。随意尝试或询问。

【讨论】:

  • 请给我一些使用 AOP 切入点和功能与基于 swing 的应用程序的示例
  • 请给我一些使用 AOP 切入点和其他功能与基于摇摆的应用程序@kriegaex 的示例
  • 请给我一个具体的问题和一些示例代码。我想这里没有人想像那样为您创建一个完整的示例或教程。您是否曾经使用过 AspectJ 并遇到过使用它的特定问题?请缩小范围。
  • 检查更新。我添加了示例代码,因为您似乎懒得自己提供任何代码。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2013-08-07
  • 2018-12-02
相关资源
最近更新 更多