java中的剪贴板侦听器

java中的剪贴板侦听器,java,listener,clipboard,toolkit,Java,Listener,Clipboard,Toolkit,我正试图写一个简单的程序来听剪贴板副本并保存它们。 我编写了以下代码: package CopyPaste; import javax.swing.JFrame; public class Main { public static void main(String[] args){ JFrame frame = new JFrame("Copy Paste"); frame.setDefaultCloseOperation(JFrame.EXIT_O

我正试图写一个简单的程序来听剪贴板副本并保存它们。 我编写了以下代码:

package CopyPaste;

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args){
        JFrame frame = new JFrame("Copy Paste");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,600);
        frame.setLocationRelativeTo(null);

        MyPanel pane = new MyPanel();
        frame.add(pane);

        frame.setVisible(true);
    }
}


错误:
线程“main”java.lang.NullPointerException中出现异常
在CopyPaste.MyPanel.(MyPanel.java:39)
在CopyPaste.Main.Main(Main.java:13)处
出于某种原因,eclipse没有显示任何错误,但是当我点击“run”按钮时,我得到了一些编译错误。
有人知道这是什么原因吗?

您的错误发生在Panel类的第39行,因为错误消息中的这一行告诉您:

at CopyPaste.MyPanel.<init>(MyPanel.java:39)

因此,当您尝试向剪贴板变量c添加一个FlavorListener时,它是空的,并且在您尝试使用它之前必须对它进行初始化。

这是一篇旧文章,但我将为搜索相同内容的其他人回答这个问题。正确的方法是在定义FlavourListener之前初始化剪贴板。因此,“MyPanel”构造函数必须立即更新:

public MyPanel(){
        this.setLayout(new BorderLayout());

        text = new TextArea();
        text.setFont(f);
        add(BorderLayout.CENTER,text);
        add(BorderLayout.SOUTH,this.getSouthButton());

        c = Toolkit.getDefaultToolkit().getSystemClipboard();
        c.addFlavorListener(new FlavorListener() {

            @Override
            public void flavorsChanged(FlavorEvent e) {
                proccessClipboard(c);

            }
        });
    }

你能告诉我们你看到的错误的文本吗?而且我不确定你怎么能在看起来编译得很好的代码中得到“编译错误”。仅供参考:是一个现有的Java类。Chit,这不是“编译错误”,这是一个NullPointerException——这两者之间有巨大的区别!找到引发异常的行,并找出该行上的哪个变量为null。
at CopyPaste.MyPanel.<init>(MyPanel.java:39)
c.addFlavorListener(new FlavorListener() {
public MyPanel(){
        this.setLayout(new BorderLayout());

        text = new TextArea();
        text.setFont(f);
        add(BorderLayout.CENTER,text);
        add(BorderLayout.SOUTH,this.getSouthButton());

        c = Toolkit.getDefaultToolkit().getSystemClipboard();
        c.addFlavorListener(new FlavorListener() {

            @Override
            public void flavorsChanged(FlavorEvent e) {
                proccessClipboard(c);

            }
        });
    }