java 用swing做的记事本,但是设置不了默认字体大小有时候退出还会报错,错误是:
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at sun.java2d.Disposer.run(Disposer.java:127)
at java.lang.Thread.run(Thread.java:662)
Exception while removing reference: java.lang.InterruptedException代码:
package work2;import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.*;import javax.swing.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Notepad extends JFrame implements ItemListener , ActionListener{ public static final int WINDOW_WIDTH = 800;
public static final int WINDOW_HEIGHT = 600;

JComboBox jcb1 = null;
JComboBox jcb2 = null;
String[] fontSize = {"10","12","14","16","18","20","22","24","26","48","72"};
/*String[] fontFamily = {"仿宋体","黑体","楷体","宋体","微软雅黑","Serief"};*/
TextArea txContent = null;
File file = null ; // 接收文件
int result = 0 ; // 接收操作状态
JFileChooser fileChooser = new JFileChooser() ; // 文件选择框

public static void main(String[] args){
 new Notepad(); }
Notepad(){
Container cont = this.getContentPane();
setTitle("Notepad");
int width = getToolkit().getScreenSize().width;
int height = getToolkit().getScreenSize().height;
setSize(WINDOW_WIDTH ,WINDOW_HEIGHT);
setLocation((width-WINDOW_WIDTH)/2,(height-WINDOW_HEIGHT)/2);
//文本区
txContent = new TextArea();
txContent.setEditable(true) ;//可编辑
//滚动条
cont.add(new JScrollPane(txContent)) ;
//菜单栏
JMenuBar myJMenuBar = new JMenuBar();
this.setJMenuBar(getJMenuBar());
JMenu jMenu1 = new JMenu("文件");

JMenuItem jit1 = new JMenuItem("新建");
JMenuItem jit2 = new JMenuItem("打开");
JMenuItem jit3 = new JMenuItem("保存");
JMenuItem jit4 = new JMenuItem("退出");

myJMenuBar.add(jMenu1);

jMenu1.add(jit1);
jMenu1.add(jit2);
jMenu1.add(jit3);
jMenu1.add(jit4);
//设置下拉列表
jcb1 = new JComboBox(fontSize) ;// 实例化下拉列表框

JPanel jp = new JPanel();
jcb1.addItemListener(this);
jcb1.addActionListener(this);
jcb1.setMaximumRowCount(3) ;

cont.setLayout(null);
changeFontSize(12);// 默认值
myJMenuBar.setBounds(0,0,800,30);
cont.add(myJMenuBar);
jp.setBounds(0,30,800,40);

jp.add(jcb1);
cont.add(jp);
txContent.setBounds(0,70,800,530);
cont.add(txContent);

jit2.addActionListener(new ActionListener(){ JFrame frame = new JFrame();
public void actionPerformed(ActionEvent e){
txContent.setText("") ; // 打开将文字区域的内容清空
fileChooser.setApproveButtonText("确定") ;
fileChooser.setDialogTitle("打开文件") ;
result = fileChooser.showOpenDialog(this.frame) ;
if(result==JFileChooser.APPROVE_OPTION){ // 选择的是确定按钮
file = fileChooser.getSelectedFile() ; // 得到选择的文件
if(file!=null){
try{
Scanner scan = new Scanner(new FileInputStream(file)) ;
scan.useDelimiter("\n") ;
while(scan.hasNext()){
txContent.append(scan.next()) ;
txContent.append("\n") ;
}
scan.close() ;
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}
}) ;
jit3.addActionListener(new ActionListener(){

JFrame frame = new JFrame();
public void actionPerformed(ActionEvent e){
result = fileChooser.showSaveDialog(this.frame) ; // 显示保存框
if(result==JFileChooser.APPROVE_OPTION){ // 选择的是确定按钮
file = fileChooser.getSelectedFile() ; // 得到选择的文件
}
if(file!=null){
try{
PrintStream out = new PrintStream(new FileOutputStream(file)) ;
out.print(txContent.getText()) ;
out.close() ;
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}) ;
jit4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}) ;

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
String item = (String)this.jcb1.getSelectedItem() ;
int size = 12 ; // 设置一个默认大小
try{
size = Integer.parseInt(item) ;
}catch(Exception e1){}
this.changeFontSize(size) ;
}
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){ // 判断是否是选中
String itemSize = (String)e.getItem() ;
try{
this.changeFontSize(Integer.parseInt(itemSize)) ;
}catch(Exception e1){

}
}

} public void changeFontSize(int size){

Font fnt = new Font("Serief",Font.BOLD,size) ;
txContent.setFont(fnt) ;
}
}希望各位前辈帮忙看看,急~

解决方案 »

  1.   

    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import java.awt.*;import javax.swing.*;
    import java.awt.event.*;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;public class Notepad extends JFrame implements ItemListener , ActionListener{public static final int WINDOW_WIDTH = 800;
    public static final int WINDOW_HEIGHT = 600;
    private int size=12;//初始化
    private Map mapIndex;//初始化mapIndexJComboBox jcb1 = null;
    JComboBox jcb2 = null;String[] fontSize = {"10","12","14","16","18","20","22","24","26","48","72"};
    /*String[] fontFamily = {"仿宋体","黑体","楷体","宋体","微软雅黑","Serief"};*/
    TextArea txContent = null;
    File file = null ; // 接收文件
    int result = 0 ; // 接收操作状态
    JFileChooser fileChooser = new JFileChooser() ; // 文件选择框public static void main(String[] args){
    new Notepad();}
    Notepad(){
    Container cont = this.getContentPane();
    setTitle("Notepad");
    int width = getToolkit().getScreenSize().width;
    int height = getToolkit().getScreenSize().height;
    setSize(WINDOW_WIDTH ,WINDOW_HEIGHT);
    setLocation((width-WINDOW_WIDTH)/2,(height-WINDOW_HEIGHT)/2);
    //文本区
    txContent = new TextArea();
    txContent.setEditable(true) ;//可编辑
    //滚动条
    cont.add(new JScrollPane(txContent)) ; 
    //菜单栏
    JMenuBar myJMenuBar = new JMenuBar();
    this.setJMenuBar(getJMenuBar());
    JMenu jMenu1 = new JMenu("文件");JMenuItem jit1 = new JMenuItem("新建");
    JMenuItem jit2 = new JMenuItem("打开");
    JMenuItem jit3 = new JMenuItem("保存");
    JMenuItem jit4 = new JMenuItem("退出");myJMenuBar.add(jMenu1);jMenu1.add(jit1);
    jMenu1.add(jit2);
    jMenu1.add(jit3);
    jMenu1.add(jit4);
    //设置下拉列表
    jcb1 = new JComboBox(fontSize) ;// 实例化下拉列表框JPanel jp = new JPanel();
    jcb1.addItemListener(this);
    jcb1.addActionListener(this);
    jcb1.setMaximumRowCount(3) ;cont.setLayout(null);
    changeFontSize(12);// 默认值
    myJMenuBar.setBounds(0,0,800,30);
    cont.add(myJMenuBar);
    jp.setBounds(0,30,800,40);jp.add(jcb1);
    cont.add(jp);
    txContent.setBounds(0,70,800,530);
    cont.add(txContent);jit2.addActionListener(new ActionListener(){JFrame frame = new JFrame();
    public void actionPerformed(ActionEvent e){
    txContent.setText("") ; // 打开将文字区域的内容清空
    fileChooser.setApproveButtonText("确定") ;
    fileChooser.setDialogTitle("打开文件") ;
    result = fileChooser.showOpenDialog(this.frame) ;
    if(result==JFileChooser.APPROVE_OPTION){ // 选择的是确定按钮
    file = fileChooser.getSelectedFile() ; // 得到选择的文件
    if(file!=null){
    try{
    Scanner scan = new Scanner(new FileInputStream(file)) ;
    scan.useDelimiter("\n") ;
    while(scan.hasNext()){
    txContent.append(scan.next()) ;
    txContent.append("\n") ;
    }
    scan.close() ;
    }catch(Exception e1){
    e1.printStackTrace();
    }
    }
    }
    }
    }) ;
    jit3.addActionListener(new ActionListener(){JFrame frame = new JFrame();
    public void actionPerformed(ActionEvent e){
    result = fileChooser.showSaveDialog(this.frame) ; // 显示保存框
    if(result==JFileChooser.APPROVE_OPTION){ // 选择的是确定按钮
    file = fileChooser.getSelectedFile() ; // 得到选择的文件
    }
    if(file!=null){
    try{
    PrintStream out = new PrintStream(new FileOutputStream(file)) ;
    out.print(txContent.getText()) ;
    out.close() ;
    }catch(Exception e1){
    e1.printStackTrace();
    }
    }
    }
    }) ;
    jit4.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    System.exit(0);
    }
    }) ;addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    this.setResizable(false);
    setVisible(true);
    this.initMapIndex();
    this.actionPerformed();
    }@Override
    public void actionPerformed(ActionEvent e) {
    int item = Integer.parseInt(String.valueOf(this.jcb1.getSelectedItem()));
    try{
    this.size=item;
    }catch(Exception e1){}
    this.changeFontSize(this.size) ;
    }public void actionPerformed() {
    this.jcb1.setSelectedItem(this.size);
    this.jcb1.setSelectedIndex(this.searchItemIndex());
    try{
    this.changeFontSize(this.size) ;
    }catch(Exception e1){}
    }//初始化map
    public void initMapIndex(){
    this.mapIndex=new HashMap();
    for (int i=0;i<this.fontSize.length;i++){
    mapIndex.put(this.fontSize[i],i);
    }
    }//初始化Item
    public int searchItemIndex(){
    return (Integer) this.mapIndex.get(String.valueOf(this.size));
    }
    @Override
    public void itemStateChanged(ItemEvent e) {
    if(e.getStateChange()==ItemEvent.SELECTED){ // 判断是否是选中
    String itemSize = (String)e.getItem() ;
    try{
    this.changeFontSize(Integer.parseInt(itemSize)) ;
    }catch(Exception e1){}
    }}public void initSelectedItem(){
    this.jcb1.setSelectedItem(this.size);
    }public void changeFontSize(int size){Font fnt = new Font("Serief",Font.BOLD,size) ;
    txContent.setFont(fnt) ;
    }
    }我帮你修改的。基本解决了。。
      

  2.   

    Font属性,好像··你的错误是线程错误··自己查API··