为什么我的程序适用于JFrame而不适用于JApplet?

时间:2015-04-24 09:28:29

标签: java eclipse swing jframe japplet

我有一个Java项目(用Eclipse开发),其中我使用了一些Swing组件。一开始,我使用JFrame:我从JPanel(PanelTr)创建了一个新类,在我的按钮上添加了一个ActionListener,我的JLabel,JTextField和JButton添加了一个新类,并将一个对象PanelTr添加到我的JFrame-herited类中。这是我的一段代码:

package gui;

public class PanelTr extends JPanel implements ActionListener {

    // Here I instantiate my JTextField and JButton used by ActionListener
    private JTextField textCap = new JTextField(20);
    private JButton submitButton = new JButton("Submit"); 

    public PanelTr() {

        // Here I add my JLabels and my layout manager

        submitButton.addActionListener(this);


}

    public void actionPerformed(ActionEvent evt)
    {
        if (evt.getSource()==submitButton)
        {
            JOptionPane.showMessageDialog(null,"DEBUG"); // Just to see if it is displayed
            String err = Analyzer.process(textCap.getText().toString()); // An analyzing process I use in my program
            if (err=="")
            {
                JOptionPane.showMessageDialog(null,"OK");
            }
            else
            {
                JOptionPane.showMessageDialog(null,err,"Error",JOptionPane.ERROR_MESSAGE);
            }
        }
    }   
}

我的JFrame:

package gui;

public class FrameTr extends JFrame
{
    public FrameTr()
    {
        PanelFils ctn = new PanelFils(); //Conteneur
        setContentPane(ctn);
        ctn.setBackground(new Color(0,255,255));
        setTitle("Project");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String args[])
    {
        new FrameTr();
    }
}

在我的 Analyzer 类中,我使用位于项目根文件夹中的多个Excel文件。

所以使用这段代码,我的程序在Eclipse上运行良好,当我将它导出到一个可运行的jar中时(我将我的Excel文件放在我的.jar文件的同一个文件夹中)。

但现在我需要创建一个允许程序在Web浏览器上运行的Applet。所以我用这个代码创建了一个新的基于JApplet的类:

package gui;

public class TestApplet extends JApplet{

    public void init()
    {
        PanelTr ctn = new PanelTr();
        setContentPane(ctn);
    }
}

当我在Eclipse上运行这个类时,会显示 debug JOptionPane,但是在分析过程中,我在第一个Excel文件上遇到了FileNotFoundException。我尝试将其移至 src 文件夹, gui 文件夹,甚至移至分析文件夹(我的分析器< / strong> class),但仍然是这个FileNotFoundException ...

我还尝试在网页中运行我的程序,因此我导出为可运行的jar(注意:我在启动配置中无法选择 TestApplet ,因为它没有主页( ),所以我选择 FrameTr )。我使用了标签:

<applet archive="app.jar" width="700" height="100" code="gui/TestApplet.class"/>

我的窗格显示,但是当我点击我的按钮时,调试JOptionPane不会弹出

首先,我该如何解决FileNotFound问题?然后,为什么我的网页浏览器上没有显示我的JOptionPane?

2 个答案:

答案 0 :(得分:2)

小程序受到限制,无法访问文件系统(签名小程序除外)。

如果jar中的文件可以将它们用作资源。而不是使用例如FileInputStream使用this.getClass().getResourceAsStream("/Countries.xlsx")(Countries.xlsx应该在根目录中)

答案 1 :(得分:1)

Java Applet在客户端执行 - 它在使用该网站的人的计算机上运行。它不在Web服务器上运行。

如果您在服务器中有文件,那么除非您从Web服务器提供文件并通过HTTP(S)访问它们,否则客户端将无法访问它们。

如果文件中的值是常量,那么您应该将文件放在JAR中并将它们作为Applet的一部分分发。