I am trying to write a simple program to listen to clipboard copys and save them. I wrote the following code:
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);
}
}
package CopyPaste;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.lang.Object;
import javax.swing.JButton;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements ClipboardOwner{
private final static Font f = new Font("david", Font.BOLD,22);
private static TextArea text;
private JButton btnGet;
private Clipboard c;
public MyPanel(){
this.setLayout(new BorderLayout());
text = new TextArea();
text.setFont(f);
add(BorderLayout.CENTER,text);
add(BorderLayout.SOUTH,this.getSouthButton());
c.addFlavorListener(new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
proccessClipboard(c);
}
});
}
private static void proccessClipboard(Clipboard c){
String s = null;
c = Toolkit.getDefaultToolkit().getSystemClipboard();
try {
s = (String) c.getContents(null).getTransferData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException | IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
text.setText(s);
}
//return the south panel button
private JPanel getSouthButton(){
JPanel south = new JPanel();
btnGet = new JButton("Get");
ButtonLis lis = new ButtonLis();
btnGet.addActionListener(lis);
south.add(btnGet);
return south;
}
private class ButtonLis implements ActionListener{
public void actionPerformed(ActionEvent e) {
String s = null;
if (e.getSource()==btnGet){
c = Toolkit.getDefaultToolkit().getSystemClipboard();
try {
s = (String) c.getContents(null).getTransferData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException | IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
text.setText(s);
}
}
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
// TODO Auto-generated method stub
}
}
error:
Exception in thread "main" java.lang.NullPointerException
at CopyPaste.MyPanel.<init>(MyPanel.java:39)
at CopyPaste.Main.main(Main.java:13)
for some reason the eclipse don't show any errors but when i hit the "run" button i get some compile error. someone know what can cause this?