2015-09-25 1 views
0

Я создал Java-апплет.Java-апплет не отображается правильно

<applet code=gui.clientGUI.MyApplet.class 
     archive="QTminer.jar" 
     width=400 height=200> 
</applet> 

моя баночка выглядит следующим образом:

enter image description here

это мой простой код:

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

public class MyApplet extends JApplet { 

    public void init() { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       public void run() { 
        initUI(); 
       } 
      }); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void initUI() { 
     getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); 

     JButton btnStartApplication = new JButton("Start Application"); 
     btnStartApplication.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       SS oi = new SS(); 
       oi.setVisible(true); 
      } 
     }); 
     getContentPane().add(btnStartApplication); 
    } 
} 

class SS extends JWindow { 

    private JLabel lblNewLabel; 
    private JLabel label; 

    public SS() { 
    setBounds(new Rectangle(0, 0, 883, 590)); 
    setLocationRelativeTo(null); 
    getContentPane().setLayout(null); 

    lblNewLabel = new JLabel("Welcome", SwingConstants.CENTER); 
    lblNewLabel.setForeground(Color.RED); 
    lblNewLabel.setFont(new Font("Segoe UI", Font.BOLD | Font.ITALIC, 24)); 
    lblNewLabel.setBounds(0, 313, 883, 41); 
    getContentPane().add(lblNewLabel); 

    label = new JLabel(new ImageIcon(getClass().getResource("/gui/resources/Qtminer_background.jpg"))); 

    label.setBounds(0, 0, 883, 592); 
    getContentPane().add(label); 

    setVisible(true); 
} 
} 

Моя проблема заключается в том, что при работе в затмении все работает, но при работе в браузер. Я получаю исключение NullPointerException прямо на загрузку значка изображения:

label.setIcon(new ImageIcon(getClass().getResource("/gui/resources/Qtminer_background.jpg"))); 
+1

Я думаю, вы не можете ожидать появления JWindow (в браузере), который работает независимо от JApplet ... Это тоже было бы очень недружелюбным пользователем. Почему бы вам просто не сделать все внутри одного JApplet? - Удалите предыдущую панель и добавьте новую. Кстати, может быть, вы получите лучшую помощь, чем мой комментарий, если вы опубликуете [mcve]. Вам просто нужно показать нам компилируемый пример, который запускает новый JWindow после нажатия кнопки внутри JApplet. –

+2

Не уверен, что это причина вашей проблемы, но вы должны заменить спин-петли наподобие 'while (object.showable == false);' с [wait] (http://docs.oracle.com/javase/8 /docs/api/java/lang/Object.html#wait--)/[notify](http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify- -) или с помощью [CountDownLatch] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html). – VGR

+0

Я попробую, но если вы хотите, вы можете попробовать скомпилировать этот код, он полностью компилируется. –

ответ

0

Моя ОС запретила доступ к локальной файловой банке.

Тестирование апплета на реальном веб-сервере заставило его работать.

Решенный!