代码逻辑和拼写都没有问题,因为是照着书上写的。
但是所有的Logger.后面跟的方法全部报错了
整体代码有点长 有100多行,希望有大佬指点一下。
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.System.Logger;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.*;
public class LoggingImageViewer {
public static void main(String []args)
{
if(System.getProperty("java.util.logging.class") == null
&& System.getProperty("java.util.logging.config.file") == null)
{
try
{
Logger.getLogger("con.horstmann.corejava").setLevel(Level.ALL);
final int LOG_ROTATION_COUNT = 10;
Handler handler = new FileHandler("%h/LoggingImageViewer.log",0,LOG_ROTATION_COUNT);
Logger.getLogger("com.horstmann.corejava").addHandler(handler);
}
catch(IOException e)
{
//这里Logger.getLogger就报错了 后面凡是Logger都报错了
Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,
"Can't create log file handler",e);
}
}
EventQueue.invokeLater(() ->
{
Handler windowHandler = new WindowHandler();
windowHandler.setLevel(Level.ALL);
Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);
JFrame frame = new ImageViewerFrame();
frame.setTitle("LoggingImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
frame.setVisible(true);
});
}
}
class ImageViewerFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400;
private JLabel label;
private static Logger logger = Logger.getLogger("com.horetmann.corejava");
public ImageViewerFrame()
{
logger.entering("ImageViewerFrame","<init>");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener());
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
logger.fine("Exiting.");
System.exit(0);
}
});
label =new JLabel();
add(label);
logger.exiting("ImageViewerFrame","<init>");
}
private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
logger.entering("ImageViewwerFrame.FileOpenListener","actionPerformed",event);
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File f)
{
return f.getName().toLowerCase().endsWith(".gif")||f.isDirectory();
}
public String getDescription()
{
return "GIF Images";
}
});
int r = chooser.showOpenDialog(ImageViewerFrame.this);
if(r == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
logger.log(Level.FINE, "Reading file {0}",name);
label.setIcon("File open dialog canceled.");
}
else logger.fine("File open dialog canceled.");
logger.exiting("ImageViewerFrame.FileOpenListener","acrionPerformed");
}
}
}
class WindowHandler extends StreamHandler
{
private JFrame frame;
public WindowHandler()
{
frame = new JFrame();
final JTextArea output = new JTextArea();
output.setEditable(false);
frame.setSize(200,200);
frame.add(new JScrollPane(output));
frame.setFocusableWindowState(false);
frame.setVisible(true);
setOutputStream(new OutputStream()
{
public void write(int b)
{}
public void write(byte[] b,int off,int len)
{
output.append(new String(b,off,len));
}
});
}
public void publish(LogRecord record)
{
if(!frame.isVisible()) return;
super.publish(record);
flush();
}
}
报的啥错贴出来看一下,你用的是jdk多少版本,10以下没有这个类,要是没设置jre那就是默认的jdk。应该就是版本低了