JFrame com fundo transparente desfocado

Eu gostaria de fazer um borrão no plano de fundo do JFrame, que é transparente para mostrar o que está acontecendo embaixo dele, mas não tenho idéia de como posso desfocar o fundo e evitar tremeluzir. O que eu quero alcançar é ter um plano de fundo transparente, que é um pouco desfocado, mas ainda mostra a "visão ao vivo" das janelas embaixo dele, para não ter uma imagem estática embaçada que não muda. Tenha em mente que a janela pode ter o tamanho da tela cheia.

Espero ter descrito corretamente, pois ainda sou iniciante em Java Graphics.

O quadro transparente no código:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class BlurredBackgroundWindow {

    public static void main(String[] args) {
        new BlurredBackgroundWindow().drawGUI();
    }

    public void drawGUI() {
        myJFrame frm = new myJFrame();
        frm.setTitle("BlurredBackgroundWindow");
        frm.setSize(480, 360);
        frm.setUndecorated(true);
        frm.setBackground(new Color(0,0,0,1));
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frm.setVisible(true);
    }

    class myJFrame extends JFrame {

        public void paint(Graphics g) {
            super.paint(g);

            // Doing the rest of painting here
        }

    }

}

Nota - O quadro é completamente transparente e para ver algum efeito, altere a cor para, por exemplo.

frm.setBackground(new Color(0,100,0,100));

Obrigado por qualquer ajuda

EDIT 1: Aqui está o efeito em ação com o piscar que eu quero evitar, mas eu realmente não sei como ... Este funciona apenas para uma janela de tela cheia.

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;

public class BlurredBackgroundWindow {

    public static int FPS = 2;
    private BufferedImage temp = null;
    private BufferedImage out = null;
    private BufferedImage image = null;

    myJFrame frm = new myJFrame();

    public static void main(String[] args) {
        new BlurredBackgroundWindow().drawGUI();
    }

    public void drawGUI() {
        frm.setTitle("BlurredBackgroundWindow");
        frm.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frm.setUndecorated(true);
        frm.setBackground(new Color(0,0,0,1));
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frm.setVisible(true);

        Timer bcg = new Timer();
        bcg.schedule(new TimerTask() {

            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Rectangle screenRectangle = new Rectangle(screenSize);
            Robot robot;

            public void run() {

                System.out.println("Repaint");
                frm.repaint();
                try {
                    robot = new Robot();
                    image = robot.createScreenCapture(screenRectangle);
                } catch (AWTException e) {}
                frm.repaint();
                // Save the blurred image for debugging
                /*try {
                    ImageIO.write(image, "png", new File("C:\\test.png"));
                } catch (IOException e) {
                    e.printStackTrace();
                }*/

            }

        }, 0, (int) (1000f/FPS));
    }

    class myJFrame extends JFrame {

        public void paint(Graphics g) {
            super.paint(g);

            if(image != null) {
                   float[] matrix = {
                            0.111f, 0.111f, 0.111f, 
                            0.111f, 0.111f, 0.111f, 
                            0.111f, 0.111f, 0.111f, 
                        };
                        BufferedImageOp op = new ConvolveOp( new Kernel(3, 3, matrix) );
                        temp = op.filter(image, out);
                        out = temp;
                g.drawImage(out,0,0,null);
                temp=null;out=null;image=null;
            }

        }

    }

}

questionAnswers(2)

yourAnswerToTheQuestion