FileDialog无法在JApplet中运行

时间:2012-04-22 16:41:10

标签: java swing jfilechooser japplet

我正在将应用程序从独立(JFrame)转换为Applet(JApplet)。我已经将FileDialog构造函数中的参数从父框架更改为getContentPane,这不能正常工作。我得到了Cast类异常,说不能将Jpanel强制转换为Frame。

请找到SSCCE。请帮我解决这个问题。

public class SampleApplet extends JApplet{

protected JButton countryButton = new JButton("Select");

public synchronized void init()
{
    this.setBounds(new Rectangle(350,350));
    this.add(countryButton);


    countryButton.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent arg0) {
            getCountries();
            getCountries();             
        }

    });
}

protected void getCountries() {
    FileDialog fileDialog_ImageIn = new FileDialog((Frame) getContentPane() ,"Select a GIF file", FileDialog.LOAD);
    fileDialog_ImageIn.setVisible(true);
    if (fileDialog_ImageIn.getFile() == null) 
        return;
    else
        System.out.println(fileDialog_ImageIn.getDirectory() + fileDialog_ImageIn.getFile());
}

}

1 个答案:

答案 0 :(得分:3)

  

我正在将应用程序从独立(JFrame)转换为Applet(JApplet)。

不要那样做!而是使用Java Web Start从链接启动框架。它将提供更好的用户体验,并且更易于开发和部署。

顺便说一句

  1. 基于Swing的JFileChooser比基于AWT的FileDialog更好(更易配置等)。
  2. 使用JWS启动的applet或框架需要受信任才能使用其中任何一个类。如果应用程序。使用JWS启动,JNLP API提供了一种访问文件系统的方法,该文件系统甚至适用于完全沙盒代码,但它需要进行一些更改,因为它使用的机制不同于我在上面提到的2个组件中的任何一个。这是一个小demo. of the JNLP file services。试试沙盒版本,看看它是否适用于您的用例。代码链接位于启动按钮的右侧。