2011-08-21 54 views
1

我最終在Netbeans中得到了這個計算器應用程序,能夠正確編譯並運行客戶端,而且沒有任何錯誤,但由於某種原因,我無法將其作爲applet使用。我花了很多時間試圖弄清楚和研究,但無濟於事。任何專家都可以快速查看並查看問題所在。將Swing應用程序轉換爲Applet的併發症

我真的很感激任何建議,謝謝。

package eventhandler; 

import javax.swing.JApplet; 

public class CalculatorApplet extends JApplet { 


    @Override 
    public void init() { 

    } 

    @SuppressWarnings("unchecked") 

    private void initComponents() { 

     firstText = new javax.swing.JTextField(); 
     secondText = new javax.swing.JTextField(); 
     postLabel = new javax.swing.JLabel(); 
     postButton = new javax.swing.JButton(); 
     comboBox = new javax.swing.JComboBox(); 
     jButton1 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     postButton.setText("Solve"); 
     postButton.addActionListener(new java.awt.event.ActionListener() { 
      @Override 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       postName(evt); 
      } 
     }); 

     comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "+", "-", "*", "/" })); 

     jButton1.setText("Clear"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      @Override 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       clearFields(evt); 
      } 
     }); 

     org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
        .add(layout.createSequentialGroup() 
         .add(47, 47, 47) 
         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) 
          .add(org.jdesktop.layout.GroupLayout.LEADING, secondText, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE) 
          .add(org.jdesktop.layout.GroupLayout.LEADING, firstText) 
          .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() 
           .add(21, 21, 21) 
           .add(comboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) 
        .add(layout.createSequentialGroup() 
         .addContainerGap() 
         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) 
          .add(postLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 51, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
          .add(postButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 91, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) 
         .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) 
         .add(jButton1))) 
       .addContainerGap(24, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 
      .add(layout.createSequentialGroup() 
       .addContainerGap() 
       .add(firstText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 
       .add(secondText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .add(comboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) 
       .add(18, 18, 18) 
       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) 
        .add(postButton) 
        .add(jButton1)) 
       .add(5, 5, 5) 
       .add(postLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 

     //pack(); 
    }// </editor-fold> 

    private void postName(java.awt.event.ActionEvent evt) { 
     String ft = firstText.getText(); 
     String lt = secondText.getText(); 
     String total; 
     double parse1, parse2; 

     Object selectedCombo = comboBox.getSelectedItem(); 

     if (selectedCombo == "+") { 
      parse1 = Double.parseDouble(ft); 
      parse2 = Double.parseDouble(lt); 
      total = String.valueOf(parse1 + parse2); 
      postLabel.setText(total); 

     } else if (selectedCombo == "-") { 
      parse1 = Double.parseDouble(ft); 
      parse2 = Double.parseDouble(lt); 
      total = String.valueOf(parse1 - parse2); 
      postLabel.setText(total); 

     } else if (selectedCombo == "*") { 
      parse1 = Double.parseDouble(ft); 
      parse2 = Double.parseDouble(lt); 
      total = String.valueOf(parse1 * parse2); 
      postLabel.setText(total); 

     } else if (selectedCombo == "/") { 
      parse1 = Double.parseDouble(ft); 
      parse2 = Double.parseDouble(lt); 
      total = String.valueOf(parse1/parse2); 
      postLabel.setText(total); 
     } 

    } 

    private void clearFields(java.awt.event.ActionEvent evt) { 
     firstText.setText(null); 
     secondText.setText(null); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new EventGUI().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JComboBox comboBox; 
    private javax.swing.JTextField firstText; 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton postButton; 
    private javax.swing.JLabel postLabel; 
    private javax.swing.JTextField secondText; 
    // End of variables declaration 

    private void setDefaultCloseOperation(int EXIT_ON_CLOSE) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 
} 
+4

你應該告訴我們當試圖加載小程序時會發生什麼,有什麼異常?什麼不工作? – home

+0

一個沙盒小程序'EXIT_ON_CLOSE'不能結束虛擬機。你爲什麼試圖將它轉換爲applet,而不是使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)來啓動它?這將是更好的用戶體驗,並且部署和維護的麻煩更少。 –

+0

另請注意,'GroupLayout'包含在J2SE 6中。爲什麼你仍然使用'jdesktop'包中的版本? –

回答

2

當使用applet時,人們通常會在init()方法中添加GUI代碼。你的init()方法是空的。簡單的例子:

//<applet code="AppletBasic.class" width="500" height="300"></applet> 
// The above line makes it easy to test the applet from the command line by using: 
// appletviewer AppletBasic.java 

import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.awt.event.*; 

public class AppletBasic extends JApplet 
{ 
    /** 
    * Create the GUI. For thread safety, this method should 
    * be invoked from the event-dispatching thread. 
    */ 
    private void createGUI() 
    { 
     JLabel appletLabel = new JLabel("I'm a Swing Applet"); 
     appletLabel.setHorizontalAlignment(JLabel.CENTER); 
     appletLabel.setFont(new Font("Serif", Font.PLAIN, 36)); 
     add(appletLabel); 
    } 

    public void init() 
    { 
     try 
     { 
      SwingUtilities.invokeAndWait(new Runnable() 
      { 
       public void run() 
       { 
        createGUI(); 
       } 
      }); 
     } 
     catch (Exception e) 
     { 
      System.err.println("createGUI didn't successfully complete: " + e); 
     } 
    } 

    public static void main(String[] args) 
    { 
     JApplet applet = new AppletBasic(); 
     applet.init(); 

     JFrame frame = new JFrame("Applet in Frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(applet); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     applet.start(); 
    } 
} 
0

正如我可以看到

  • A)您可以使用的GroupLayout,但它不是一個常見的J2SE < V6對象;正如我所看到的,您使用本地NB庫,也許這意味着您安裝了較舊的JDK;如果是這樣,你需要在你的applet jar中將GroupLayout作爲一個導入的lib;無論如何,我建議你正好有你的JDK和JRE升級到6
  • B)我沒有發現任何this.getContentPane().add()等爲 您的小程序:(但仍然類擴展JApplet的

  • C),當然,你應該把initGUI()的init()方法 因爲小程序是作爲同主要方法在桌面應用程序:)

無論如何,這僅僅是一個快速瀏覽一下。 ..所以,如果你有一些拋出的異常,將它添加到你的問題中會更有幫助。這將有助於以更深的方式分析問題:)

祝你好運