Como posso executar um applet como um aplicativo?

Eu tenho uma class Applet, e eu quero fazê-lo funcionar como um aplicativo, então eu escrevi para o seguinte código:

public static void main(String args[]) { JFrame app = new JFrame("Applet Container"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(200, 100); Hangman applet = new Hangman(); applet.init(); app.setLayout(new BorderLayout()); app.setSize(500,500); app.getContentPane().add(applet, BorderLayout.CENTER); app.setVisible(true); } 

Nota: Hangman é a class de applet. E se eu rodá-lo, funciona bem, mas o que eu estou tentando fazer é fazê-lo funcionar como uma aplicação.

Quando eu corro o principal acima, recebi o seguinte erro:

 Exception in thread "main" java.lang.NullPointerException at java.applet.Applet.getCodeBase(Applet.java:152) at Me.Hangman.init(Hangman.java:138) at Me.Client.main(Client.java:54) Java Result: 1 

Este erro é proveniente desta linha na class Hangman:

 danceMusic = getAudioClip(getCodeBase(), "../../audio/dance.au"); 

O método GetCodeBase () retorna null, eu preciso de ajuda sobre como posso fazer esse método funcionar corretamente ou talvez substituí-lo por outro método que possa acessar meus arquivos para obter resources?

Agradeço antecipadamente

Os applets têm um ambiente de tempo de execução especial. Se você quiser que seu código seja executado também como um aplicativo, não será possível confiar em QUALQUER funcionalidade fornecida por esse ambiente.

Obviamente, você está usando uma function específica do Applet aqui. Você precisa pesquisar como fazer isso em um aplicativo, depois detectar o ambiente em que está sendo executado e usar os methods apropriados.

Editar:

Em vez de getCodeBase() eu tentaria:

 getClass().getProtectionDomain().getCodeSource().getLocation(); 

Mas o getAudioClip também é definido em um applet, de modo que também não é necessário. Em vez de java.applet.AudioClip você precisa usar a API javax.sound.sampled .

Use Hangman.class.getResource () ou getResourceAsStream () para carregar resources. http://www.java2s.com/Code/JavaAPI/java.lang/ClassgetResourceStringnamerelativetotheclasslocation.htm

Eu estou tendo um problema semelhante e surgiu com o seguinte, que funciona muito bem para os parâmetros, codeBase e getImage – Eu ainda estou procurando a parte getAudioClip () … seria ótimo se houvesse algo como ImageIo para áudio .. ..

 // simulate Applet environment Map params = new HashMap(); URL documentBase; /** * set the parameter with the given name * * @param name * @param value */ public void setParameter(String name, String value) { params.put(name.toUpperCase(), value); } @Override public String getParameter(String name) { String result = null; if (params.containsKey(name)) result = params.get(name); else { try { result = super.getParameter(name); } catch (java.lang.NullPointerException npe) { throw new IllegalArgumentException("parameter " + name + " not set"); } } return result; } /** * @param documentBase * the documentBase to set * @throws MalformedURLException */ public void setDocumentBase(String documentBase) throws MalformedURLException { this.documentBase = new URL(documentBase); } @Override public URL getDocumentBase() { URL result = documentBase; if (result == null) result = super.getDocumentBase(); return result; } @Override public Image getImage(URL url) { Image result = null; if (this.documentBase != null) { try { result = ImageIO.read(url); } catch (IOException e) { } } else { result = super.getImage(url); } return result; }