ayuda con mi programa escritura en archivo por medio de una interfaz

buenas noches!. Miren estoy con un programa que dando clic en el boton capture lo que se encuentre en el JTextField y lo escriba en un archivo de texto. Según yo esta bien pero me marca muchos errores al momento de realizar el evento.

Les dejo el código para que, de favor me digan mi error o errores.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

import javax.swing.*;
public class Main extends JFrame{

JTextField caja;
JButton boton;
JLabel tex;
String direccion ="C:\\Users\\CROSSFIRE\\Documents\\java2\\java.txt";
File archivo = new File(direccion);
FileOutputStream Escribe = null;
String texto;

public Main(){
super("el Dichos Comunes");
Container contenedor = getContentPane();
contenedor.setLayout(new FlowLayout());
tex = new JLabel("Teclea el dicho");
contenedor.add(tex);
caja = new JTextField(20);
contenedor.add(caja);
boton = new JButton("Terminar");
contenedor.add(boton);
Evento eve = new Evento();
caja.addActionListener(eve);
boton.addActionListener(eve);

setSize(250,150);
setVisible(true);

}

public void escribir(){

texto= caja.toString();
try{
Escribe = new FileOutputStream(archivo,true);
}

catch(FileNotFoundException e){
e.printStackTrace(System.err);
}

FileChannel canal = Escribe.getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);

for(char fra:texto.toCharArray()){
buf.putChar(fra);}

try{
canal.write(buf);
Escribe.close();
}
catch(IOException e){
e.printStackTrace(System.err);

}

}

public class Evento implements ActionListener{

public void actionPerformed(ActionEvent a) {
if (a.getSource()==caja){

}else if(a.getSource()==boton){
escribir();
}
}
}

public static void main(String[] args) {
Main ventana = new Main();
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}