我有一个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?
答案 0 :(得分:2)
小程序受到限制,无法访问文件系统(签名小程序除外)。
如果jar中的文件可以将它们用作资源。而不是使用例如FileInputStream使用this.getClass().getResourceAsStream("/Countries.xlsx")
(Countries.xlsx应该在根目录中)
答案 1 :(得分:1)
Java Applet在客户端执行 - 它在使用该网站的人的计算机上运行。它不在Web服务器上运行。
如果您在服务器中有文件,那么除非您从Web服务器提供文件并通过HTTP(S)访问它们,否则客户端将无法访问它们。
如果文件中的值是常量,那么您应该将文件放在JAR中并将它们作为Applet的一部分分发。