1

我正在将应用程序从独立 (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());
}

}

4

1 回答 1

3

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

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

顺便提一句

  1. 基于 Swing 的JFileChooser比基于 AWT 的更好(更可配置等)FileDialog
  2. 需要信任使用 JWS 启动的小程序或框架才能使用这些类中的任何一个。如果应用程序。JNLP API 是使用 JWS 启动的,JNLP API 提供了一种访问文件系统的方法,该方法甚至适用于完全沙盒代码,尽管它需要进行一些更改,因为它使用的机制不是我在上面提到的 2 个组件中的任何一个点1.这是一个小演示。的 JNLP 文件服务。尝试沙盒版本,看看它是否适用于您的用例。代码链接位于启动按钮的右侧。
于 2012-04-22T16:54:44.470 回答