JDK 版本1.6.*;
操作系统:Windows XP,SP2
编辑器:UltraEdit
源代码如下:import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;public  class SliderTest
{
public static void main(String[] args)
{
SliderTestFrame frame = new SliderTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class SliderTestFrame extends JFrame
{
public SliderTestFrame()
{
setTitle("SliderTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

sliderPanel = new JPanel();
sliderPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

//common listener for all sliders
listener = new 
    ChangeListener()
    {
       public void stateChanged(ChangeEvent event)
       {
        //update text field when the slider value changes
        JSlider source = (JSlider) event.getSource();
        textField.setText("" + source.getValue());
       }
     };
    
     JSlider slider = new JSlider();
     addSlider(slider, "Plain");
    
     //add a slider with major and minor ticks 
    
     slider = new JSlider();
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
     addSlider(slider, "Ticks");
    
     //add a slider that snaps to ticks
    
     slider = new JSlider();
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
     addSlider(slider, "Snap to ticks");
    
     //add a slider with no tracks
    
     slider = new JSlider();
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
     slider.setPaintTrack(false);
     addSlider(slider, "No track");
    
     //add an inverted slider
    
     slider = new JSlider();
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
     slider.setInverted(true);
     addSlider(slider, "Inverted");
    
     //add a slider with numeric labels
    
     slider = new JSlider();
     slider.setPaintLabels(true);
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
     addSlider(slider, "Labels");
    
     //add a slider with alphabetic labels
    
     slider = new JSlider();
     slider.setPaintLabels(true);
     slider.setPaintTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
    
     Dictionary<Integer, Component> labelTable = new Hashtable<Integer, Component> ();
     labelTable.put(0, new JLabel("A"));
     labelTable.put(20, new JLabel("B"));
     labelTable.put(40, new JLabel("C"));
     labelTable.put(60, new JLabel("D"));
     labelTable.put(80, new JLabel("E"));
     labelTable.put(100, new JLabel("F"));
    
     slider.setLabelTable(labelTable);
     addSlider(slider, "Custom labels");
    
     //add a slider with icon labels
     slider = new JSlider();
     slider.setPaintLabels(true);
     slider.setPaintTicks(true);
     slider.setSnapToTicks(true);
     slider.setMajorTickSpacing(20);
     slider.setMinorTickSpacing(5);
   
    labelTable = new Hashtable<Integer, Component>();
    
    slider.setLabelTable(labelTable);
    addSlider(slider, "Icon labels");
    
    //add the text field that displays the slider value
    
    textField = new JTextField();
    add(sliderPanel, BorderLayout.CENTER);
    add(textField, BorderLayout.SOUTH);
  }
  
  public void addSlider(JSlider s, String description)
  {
   s.addChangeListener(listener);
   JPanel panel = new JPanel();
   panel.add(s);
   panel.add(new JLabel(description));
     sliderPanel.add(panel);
   }
   
   public static final int DEFAULT_WIDTH= 350;
   public static final int DEFAULT_HEIGHT = 450;
   
   private JPanel sliderPanel;
   private JTextField textField;
   private ChangeListener listener;
 }
 
      
编译通过,但是无法运行,显示Exception in main,java.lang.NullPointerException...求教各位前辈是什么原因呀~~谢谢先啦

解决方案 »

  1.   

      labelTable = new Hashtable<Integer, Component>();
                
      slider.setLabelTable(labelTable);
    这里出错了,labelTable 刚初始化,里面没有数据,就会报java.lang.NullPointerException labelTable = new Hashtable<Integer, Component>();
    注释这句就可以运行显示了
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;public class SliderTest {
    public static void main(String[] args) {
    SliderTestFrame frame = new SliderTestFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }class SliderTestFrame extends JFrame {
    public SliderTestFrame() {
    setTitle("SliderTest");
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); sliderPanel = new JPanel();
    sliderPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); // common listener for all sliders
    listener = new ChangeListener() {
    public void stateChanged(ChangeEvent event) {
    // update text field when the slider value changes
    JSlider source = (JSlider) event.getSource();
    textField.setText("" + source.getValue());
    }
    }; JSlider slider = new JSlider();
    addSlider(slider, "Plain"); // add a slider with major and minor ticks slider = new JSlider();
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    addSlider(slider, "Ticks"); // add a slider that snaps to ticks slider = new JSlider();
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    addSlider(slider, "Snap to ticks"); // add a slider with no tracks slider = new JSlider();
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    slider.setPaintTrack(false);
    addSlider(slider, "No track"); // add an inverted slider slider = new JSlider();
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    slider.setInverted(true);
    addSlider(slider, "Inverted"); // add a slider with numeric labels slider = new JSlider();
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5);
    addSlider(slider, "Labels"); // add a slider with alphabetic labels slider = new JSlider();
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5); Dictionary<Integer, Component> labelTable = new Hashtable<Integer, Component>();
    labelTable.put(0, new JLabel("A"));
    labelTable.put(20, new JLabel("B"));
    labelTable.put(40, new JLabel("C"));
    labelTable.put(60, new JLabel("D"));
    labelTable.put(80, new JLabel("E"));
    labelTable.put(100, new JLabel("F")); slider.setLabelTable(labelTable);
    addSlider(slider, "Custom labels"); // add a slider with icon labels
    slider = new JSlider();
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setSnapToTicks(true);
    slider.setMajorTickSpacing(20);
    slider.setMinorTickSpacing(5); labelTable = new Hashtable<Integer, Component>();// 为什么要加这句???这明显是空的 slider.setLabelTable(labelTable);
    addSlider(slider, "Icon labels"); // add the text field that displays the slider value textField = new JTextField();
    add(sliderPanel, BorderLayout.CENTER);
    add(textField, BorderLayout.SOUTH);
    } public void addSlider(JSlider s, String description) {
    s.addChangeListener(listener);
    JPanel panel = new JPanel();
    panel.add(s);
    panel.add(new JLabel(description));
    sliderPanel.add(panel);
    } public static final int DEFAULT_WIDTH = 350;
    public static final int DEFAULT_HEIGHT = 450; private JPanel sliderPanel;
    private JTextField textField;
    private ChangeListener listener;
    }第105句, labelTable = new Hashtable<Integer, Component>();// 为什么要加这句???这明显是空的 为什么又重新定义个一个对象?去掉这句就好用了,可能是你调试的时候多添了一句吧