m0_70348798 2022-07-02 16:25 采纳率: 0%
浏览 106
已结题

时间紧 今天就需 大姥求解

package ui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import Inteface.WebCache;

public class MainFrame extends JFrame implements Inteface.MainFrame {
// 图形界面
private JButton Buttonstart;
private JButton Buttonstop;
private JButton ButtonsetDir;
private JButton Buttonsetport;
private JTextField Textport;
private JTextArea TextMessage;
private JPanel right;
private JPanel bottom;
// Web Cache代理服务器
private WebCache webcache;
private String DIR;
private int PORT;

public MainFrame() {
    super("Web缓存服务器");
    init();
}

private void init() {
    Config();
    addCon();
    showFrame();

}

private void showFrame() {
    this.pack();
    this.setVisible(true);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

private void addCon() {
    bottom.add(Buttonstart);
    bottom.add(Buttonstop);
    bottom.add(Buttonsetport);
    bottom.add(ButtonsetDir);

    right.add(Textport);
    right.add(Buttonsetport);
    bottom.add(right);

    this.add(new JScrollPane(TextMessage));
    this.add(bottom, BorderLayout.SOUTH);
}

private void Config() {
    Buttonstart = new JButton("启动");
    Buttonstop = new JButton("停止");
    Buttonsetport = new JButton("设置端口");
    ButtonsetDir = new JButton("设置缓存目录");
    Textport = new JTextField(4);
    TextMessage = new JTextArea(10, 20);
    right = new JPanel(new FlowLayout());
    bottom = new JPanel();
    ButtonsetDir.addActionListener(e -> {
        JFileChooser jchose = new JFileChooser();
        jchose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnValue = jchose.showOpenDialog(this);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File file = jchose.getSelectedFile();
            DIR = file.getPath();
            webcache.setdir(DIR);
        }
    });

    Buttonstop.setEnabled(false);

    Buttonsetport.addActionListener(e -> {
        setport();
    });
    Buttonstop.addActionListener(e -> {
        Buttonstart.setEnabled(true);
        Buttonstop.setEnabled(false);
        Buttonsetport.setEnabled(true);
        Textport.setEnabled(true);
    });
    start();
    stop();
}

@Override
public void start() {
    // TODO Auto-generated method stub
    Buttonstart.addActionListener(e -> {
        if (DIR == null)
            JOptionPane.showMessageDialog(this, "请选择缓存目录");
        else if (PORT == 0)
            JOptionPane.showMessageDialog(this, "请设置端口号");
        else {
            String str = webcache.startServer();
            if (str.equals("true")) {
                Messageappend("启动成功");
                Buttonstart.setEnabled(false);
                Buttonstop.setEnabled(true);
                Buttonsetport.setEnabled(false);
                Textport.setEnabled(false);
            } else {
                Buttonstart.setEnabled(true);
                Buttonstop.setEnabled(false);
                Buttonsetport.setEnabled(true);
                Textport.setEnabled(true);
                Messageappend(str);
            }
        }

    });
}

public void Messageappend(String str) {
    if (str == null)
        TextMessage.append("\n");

    TextMessage.append(str + "\n");
}

@Override
public void stop() {
    // TODO Auto-generated method stub
    Buttonstop.addActionListener(e -> {
        webcache.stopServer();
    });
}

@Override
public void setport() {
    // TODO Auto-generated method stub
    PORT = Integer.parseInt((Textport.getText().trim()));
    System.out.println(PORT);
    webcache.setport(PORT);
}

@Override
public void setWebCache(Inteface.WebCache webcache) {
    // TODO Auto-generated method stub

}

}

img

img

错误
8090
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "Inteface.WebCache.setport(int)" because "this.webcache" is null
at ui.MainFrame.setport(MainFrame.java:149)
at ui.MainFrame.lambda$1(MainFrame.java:89)

  • 写回答

2条回答 默认 最新

  • 太空眼睛 新星创作者: Java技术领域 2022-07-02 17:26
    关注

    放下手上所有的事情,以宇宙速度解决了问题,修改后的完整代码如下:

    package ui;
    
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.io.File;
    
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    import Inteface.WebCache;
    
    public class MainFrame extends JFrame implements Inteface.MainFrame {
        // 图形界面
        private JButton Buttonstart;
        private JButton Buttonstop;
        private JButton ButtonsetDir;
        private JButton Buttonsetport;
        private JTextField Textport;
        private JTextArea TextMessage;
        private JPanel right;
        private JPanel bottom;
        // Web Cache代理服务器
        private WebCache webcache;
        private String DIR;
        private int PORT;
    
        public MainFrame() {
            super("Web缓存服务器");
            init();
        }
    
        private void init() {
            Config();
            addCon();
            showFrame();
    
        }
    
        private void showFrame() {
            this.pack();
            this.setVisible(true);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    
        private void addCon() {
            bottom.add(Buttonstart);
            bottom.add(Buttonstop);
            bottom.add(Buttonsetport);
            bottom.add(ButtonsetDir);
    
            right.add(Textport);
            right.add(Buttonsetport);
            bottom.add(right);
    
            this.add(new JScrollPane(TextMessage));
            this.add(bottom, BorderLayout.SOUTH);
        }
    
        private void Config() {
            Buttonstart = new JButton("启动");
            Buttonstop = new JButton("停止");
            Buttonsetport = new JButton("设置端口");
            ButtonsetDir = new JButton("设置缓存目录");
            Textport = new JTextField(4);
            TextMessage = new JTextArea(10, 20);
            right = new JPanel(new FlowLayout());
            bottom = new JPanel();
            ButtonsetDir.addActionListener(e -> {
                JFileChooser jchose = new JFileChooser();
                jchose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int returnValue = jchose.showOpenDialog(this);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    File file = jchose.getSelectedFile();
                    DIR = file.getPath();
                    webcache.setdir(DIR);
                }
            });
    
            Buttonstop.setEnabled(false);
    
            Buttonsetport.addActionListener(e -> {
                setport();
            });
            Buttonstop.addActionListener(e -> {
                Buttonstart.setEnabled(true);
                Buttonstop.setEnabled(false);
                Buttonsetport.setEnabled(true);
                Textport.setEnabled(true);
            });
            start();
            stop();
        }
    
        @Override
        public void start() {
            // TODO Auto-generated method stub
            Buttonstart.addActionListener(e -> {
                if (DIR == null)
                    JOptionPane.showMessageDialog(this, "请选择缓存目录");
                else if (PORT == 0)
                    JOptionPane.showMessageDialog(this, "请设置端口号");
                else {
                    String str = webcache.startServer();
                    if (str.equals("true")) {
                        Messageappend("启动成功");
                        Buttonstart.setEnabled(false);
                        Buttonstop.setEnabled(true);
                        Buttonsetport.setEnabled(false);
                        Textport.setEnabled(false);
                    } else {
                        Buttonstart.setEnabled(true);
                        Buttonstop.setEnabled(false);
                        Buttonsetport.setEnabled(true);
                        Textport.setEnabled(true);
                        Messageappend(str);
                    }
                }
    
            });
        }
    
        public void Messageappend(String str) {
            if (str == null)
                TextMessage.append("\n");
    
            TextMessage.append(str + "\n");
        }
    
        @Override
        public void stop() {
            // TODO Auto-generated method stub
            Buttonstop.addActionListener(e -> {
                webcache.stopServer();
            });
        }
    
        @Override
        public void setport() {
            // TODO Auto-generated method stub
            PORT = Integer.parseInt((Textport.getText().trim()));
            System.out.println(PORT);
            webcache.setport(PORT);
        }
    
        @Override
        public void setWebCache(Inteface.WebCache webcache) {
            this.webcache = webcache;
            this.webcache.setFrame(this);
        }
    
    }
    

    如有帮助,请采纳,十分感谢!

    评论 编辑记录
    1人已打赏

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月2日
  • 创建了问题 7月2日