也是上段代码,eclipse中编译出错,错误如下:
Exception in thread "main"com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException: Not a byte[]at formattest.IPAddressFormatter.valueToString(IPAddressFormatter.java:16)
at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:932)
at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:105)
at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:448)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:772)
at javax.swing.JFormattedTextField.setFormatterFactory(JFormattedTextField.java:404)
at javax.swing.JFormattedTextField.<init>(JFormattedTextField.java:308)
at javax.swing.JFormattedTextField.<init>(JFormattedTextField.java:297)
at formattest.FormatTestFrame.<init>(FormatTestFrame.java:112)
at formattest.FormatTest.main(FormatTest.java:9)
刚学习java,找了很长时间了,不知道错哪里了?
Exception in thread "main"com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException: Not a byte[]at formattest.IPAddressFormatter.valueToString(IPAddressFormatter.java:16)
at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:932)
at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:105)
at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:448)
at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:772)
at javax.swing.JFormattedTextField.setFormatterFactory(JFormattedTextField.java:404)
at javax.swing.JFormattedTextField.<init>(JFormattedTextField.java:308)
at javax.swing.JFormattedTextField.<init>(JFormattedTextField.java:297)
at formattest.FormatTestFrame.<init>(FormatTestFrame.java:112)
at formattest.FormatTest.main(FormatTest.java:9)
刚学习java,找了很长时间了,不知道错哪里了?
package formattest;import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.DefaultFormatter;
import javax.swing.text.DocumentFilter;
import javax.swing.text.InternationalFormatter;
import javax.swing.text.MaskFormatter;
import java.lang.reflect.Array;
import java.lang.Object;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;public class FormatTestFrame extends JFrame
{
public FormatTestFrame()
{
setTitle("FormatTest");
setSize(WIDTH,HEIGHT);
JPanel buttonPanel = new JPanel();
okButton = new JButton("ok");
buttonPanel.add(okButton);
add(buttonPanel,BorderLayout.SOUTH);
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0,3));
add(mainPanel,BorderLayout.CENTER);
JFormattedTextField intField = new JFormattedTextField(NumberFormat.getIntegerInstance());
intField.setValue(new Integer(100));
addRow("Number:",intField);
JFormattedTextField intField2 = new JFormattedTextField(NumberFormat.getIntegerInstance());
intField2.setValue(new Integer(100));
intField2.setFocusLostBehavior(JFormattedTextField.COMMIT);
addRow("Number (Commit behavior):",intField2);
//安装格式器产生想要的过滤器的程序
JFormattedTextField intField3
= new JFormattedTextField(new
InternationalFormatter(NumberFormat.getIntegerInstance())
{
protected DocumentFilter getDocumentFilter()
{
return filter;
}
private DocumentFilter filter = new IntFilter();
});
intField3.setValue(new Integer(100));
addRow("Filtered Number",intField3);
JFormattedTextField intField4 = new JFormattedTextField(NumberFormat.getIntegerInstance());
intField4.setValue(new Integer(100));
intField4.setInputVerifier(new FormattedTextFieldVerifier());
addRow("Verified Number:",intField4);
JFormattedTextField currencyField
= new JFormattedTextField(NumberFormat.getCurrencyInstance());
currencyField.setValue(new Double(10));
addRow("Currency:",currencyField);
JFormattedTextField dateField = new JFormattedTextField(DateFormat.getDateInstance());
dateField.setValue(new Date());
addRow("Date (default):",dateField);
DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
format.setLenient(false);
JFormattedTextField dateField2 = new JFormattedTextField(format);
dateField2.setValue(new Date());
addRow("Date(short,not lenient):",dateField2);
try
{
DefaultFormatter formatter = new DefaultFormatter();
formatter.setOverwriteMode(false);
JFormattedTextField urlField = new JFormattedTextField(formatter);
urlField.setValue(new URL("http://java.sun.com"));
addRow("URL:",urlField);
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
try
{
MaskFormatter formatter = new MaskFormatter("###-##-####");
formatter.setPlaceholderCharacter('0');
JFormattedTextField ssnField = new JFormattedTextField(formatter);
ssnField.setValue("078-05-1120");
addRow("SSN Mask:",ssnField);
}
catch(java.text.ParseException exception)
{
exception.printStackTrace();
}
JFormattedTextField ipField = new JFormattedTextField(new IPAddressFormatter());
ipField.setValue(new byte[] {(byte) 130,65,86,66});
addRow("IP Address:",ipField);
}
public void addRow(String labelText,final JFormattedTextField field)
{
mainPanel.add(new JLabel(labelText));
mainPanel.add(field);
final JLabel valueLabel = new JLabel();
mainPanel.add(valueLabel);
okButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
Object value = field.getValue();
if(value.getClass().isArray())
{
StringBuilder builder = new StringBuilder();
builder.append('{');
for(int i=0;i<Array.getLength(value);i++)
{
if(i>0) builder.append(',');
builder.append(Array.get(value,i).toString());
}
builder.append('}');
valueLabel.setText(builder.toString());
}
else
valueLabel.setText(value.toString());
}
});
}
public static final int WIDTH = 500;
public static final int HEIGHT = 250;
private JButton okButton;
private JPanel mainPanel;}
package formattest;import java.util.StringTokenizer;import javax.swing.text.DefaultFormatter;import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;public class IPAddressFormatter extends DefaultFormatter
{
public String valueToString(Object value)
throws ParseException
{
if(!(value instanceof byte[]))
throw new ParseException("Not a byte[]",0);
byte[] a =(byte[]) value;
if(a.length !=4)
throw new ParseException("Length !=4",0);
StringBuilder builder = new StringBuilder();
for(int i =0;i<4;i++)
{
int b = a[i];
if(b<0) b += 256;
builder.append(String.valueOf(b));
if(i<3) builder.append('.');
}
return builder.toString();
}
public Object stringToValue(String text) throws ParseException
{
StringTokenizer tokenizer= new StringTokenizer(text,".");
byte[] a = new byte[4];
for(int i =0;i<4;i++)
{
int b = 0;
if(!tokenizer.hasMoreTokens())
throw new ParseException("Too few bytes",0);
try
{
b = Integer.parseInt(tokenizer.nextToken());
}
catch(NumberFormatException e)
{
throw new ParseException("Not an integer",0);
}
if(b<0 || b>=256)
throw new ParseException("Byte out of range",0);
a[i] = (byte) b;
}
if (tokenizer.hasMoreTokens())
throw new ParseException("Too many bytes",0);
return a;
}
}这是其中的一部分代码,不知问题是否出在这两个java文件中?
这个可能是作者自己写的。