【问题标题】:Java Applet on Linux unable to gain PermissionsLinux 上的 Java Applet 无法获得权限
【发布时间】:2012-10-30 16:12:53
【问题描述】:

我正在参加在线课程,但我偶尔会挂断电话,因为该课程是半以 Windows 为中心的。目前我有一个 java 小程序,我正在尝试在其中播放音频剪辑。我正在使用 Idea Intellij,并将音频文件放在与类文件相同的位置。我还更新了idea用来运行小程序的策略文件,但无论我做什么,它似乎都找不到音频文件。我有 75% 的把握这是我在政策文件中没有弄清楚的事情(啊!),但我不知道那是什么。我将粘贴代码 sn-p、我的策略文件和尝试运行它时的一些输出。请帮助 - 这是我第二次因为 linux 特定的差异而陷入困境。

对格式问题表示歉意...

    public class MyApplet extends JApplet implements ActionListener
    {
        JButton play, stop;
        AudioClip audioClip;
        File myAudioFile;

        public void init()
        {
            play = new JButton("Play");
            play.addActionListener(this);

            stop = new JButton("Stop");
            stop.addActionListener(this
    [...took out unnecessary stuff...]
            System.out.println("Codebase is: " + getCodeBase());
            myAudioFile = new File(getCodeBase().toString()+"desktop-login.ogg");
            if(myAudioFile.exists()) {
                audioClip = getAudioClip(getCodeBase(), "desktop-login.ogg");
            }
            else {
                System.out.println("Failed to find file:"+ audioClip);
            }

        }
[...took out unnecessary stuff...]
    //------------------POLICY FILE CONTENTS--
    grant {
      permission java.security.AllPermission;
      permission java.net.SocketPermission "*", "accept, connect, listen, resolve";
    };

    grant codeBase "file:/home/mylogin/IdeaProjects/3RD/Lesson7/soundPlay/out/production/soundPlay/*" {
      permission java.util.PropertyPermission "user.home", "read";
    }; 

    //--------output (scrubbed a bit - it's failing at the audio clip play part because the audioClip object is null): 
    Codebase is: file:/home/mylogin/IdeaProjects/3RD/Lesson7/soundPlay/out/production/soundPlay/
    Failed to find file:null
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
        at MyApplet.actionPerformed(MyApplet.java:48)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 

【问题讨论】:

    标签: java permissions


    【解决方案1】:

    使用这样的文件路径并尝试

    file:////home/mylogin/IdeaProjects/3RD/Lesson7/soundPlay/out/production/soundPlay/
    

    【讨论】:

    • 这行不通。基本上这条线是问题所在:audioClip = getAudioClip(getCodeBase(), "desktop-login.ogg");我认为由于权限,它没有找到文件。它只是返回:“找不到文件:sun.applet.AppletAudioClip@b179c3”
    • 我在使用文件位置作为 uri 时遇到了类似的问题,所以我以这种方式更改了它,它适用于 windows 和 linux file:/// .可能你的情况不同。
    • 我想如果有一种方法可以转换从 getCodeBase 返回的内容并将其转换为正确的 URI,正如您所指出的那样,这可能有效。我认为必须有一个更优雅的解决方案 - 我仍然认为这是我的策略文件的权限问题......
    【解决方案2】:

    好吧,我觉得很傻。事实证明,尝试在 linux 上的本机 java 中加载 .ogg 文件是行不通的。我原以为它会使用基于 Linux 的编解码器,但我错了。它将使用 java 可以本地解码的内容 - 例如 .wav 文件。当我切换到 .wav 文件时,一切都很开心并开始工作。嘘!

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2012-07-04
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      相关资源
      最近更新 更多