【问题标题】:How to get an absolute file path with a Java applet如何使用 Java 小程序获取绝对文件路径
【发布时间】:2013-04-15 21:23:26
【问题描述】:

我正在尝试在网络浏览器中获取绝对文件路径。我了解到使用纯 HTML 和 javascript 是不可能的,而 Java 小程序是最好的途径。不幸的是,我对 Java 的了解充其量只是初级的。到目前为止,我有这个 java 代码:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.awt.Color;
/*
   <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" 
           width=150 height=100 
 codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0"> 
     <PARAM NAME="code" value="FileApplet.class">
   </OBJECT>
 */

public class fileabs extends JApplet
{
   private JTextField tfCount;
   final JFileChooser fc = new JFileChooser();

  public void init() {
      setBackground(Color.WHITE);
        JPanel p = new JPanel( new FlowLayout(FlowLayout.CENTER, 15, 15));
        p.add(new JLabel("Select File: "));
        tfCount = new JTextField(50);
        tfCount.setEditable(false);
        p.add(tfCount);
        JButton b2 = new JButton("Browse...");
        p.add(b2);
        b2.addActionListener( new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
               tfCount.setText("dsds");
                int returnVal = fc.showOpenDialog(fileabs.this);
                tfCount.setText(fc.getSelectedFile().getAbsolutePath());
            }
        } );

        // p.add(label);
        add(p);
    }

  public String getFilePath() {
    return tfCount.getText();
  }
}

根据我在http://jdk6.java.net/plugin2/liveconnect/#JS_TO_JAVA 阅读的内容,我可以从 javascript 调用小程序方法,所以我想出了这个测试网页:

<html>
    <head>
    </head>
    <body>
        <applet id="fileabs" archive="fileabs.jar" code="fileabs" width="960" height="60"></applet>
        <a href="#;" onclick="test()">Test</a>
    <script>
        test = function() {
            alert(fileabs.getFilePath());
        };
    </script>
    </body>
</html>

但是,在萤火虫控制台中,我得到:

TypeError: fileabs.getFilePath 不是函数

我觉得我错过了一些明显的东西。谁能帮我弄清楚我这里有什么问题?

【问题讨论】:

    标签: java javascript applet liveconnect


    【解决方案1】:

    您需要首先获得对小程序 DOM 元素的引用。试试alert(document.getElementById('fileabs').getFilePath());

    【讨论】:

    • HTML 的设置方式,还是会失败。原因是在声明小程序元素之后立即调用脚本,但在小程序必须完全加载并处于活动状态之前。无论如何+1。
    • 代码结构直接基于我在上面发布的链接的 LiveConnect 教程。虽然它对我来说也很奇怪,但它确实可以在不使用 getElementById() 的情况下正常工作。至于@Andrew Thompson 的评论,这不是问题;脚本标签中唯一的东西是一个常规函数,在单击“测试”链接之前不会调用它。到那时,小程序已经加载完毕,函数可以访问了。
    【解决方案2】:

    代码按照编写的方式工作。问题原来是小程序的缓存版本没有我调用的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2012-04-24
      • 2013-06-24
      • 2011-06-18
      • 2014-09-12
      • 2021-10-18
      相关资源
      最近更新 更多