Java-апплет не работает на Mac, даже если он работает на ПК - PullRequest
3 голосов
/ 16 января 2011

Я сделал игру, которая основана на jpanel. Когда я добавляю jpanel в jframe, он отлично работает как на ПК, так и на macs.

вот класс, в который я добавляю jpanel к jframe:

import javax.swing.JFrame;

public class Start{
   public static void main(String[] args){

      JFrame f = new JFrame("Rocks");
      f.setSize(600,500);
      f.setResizable(false);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Board b = new Board();
      f.add(b);
      f.setVisible(true);
   }
}

Однако, когда я добавляю jpanel в japplet, он все равно отлично работает на ПК, но не на macs. В тестере апплетов eclipse первый экран закрашивается, но он не принимает ввод с клавиатуры для запуска игры. В любой браузерной / html-странице игра, похоже, вообще не загружается, и когда я открываю консоль Java в Chrome, я не вижу ошибок.

вот класс, в который я добавляю jpanel в japplet

import javax.swing.JApplet;

public class rockAppletStart extends JApplet{

   public void init(){
      Board b;
      b = new Board();
      add(b);
      b.focus();
   }
   public void start(){}
   public void stop(){}
   public void destroy(){}
}

Буду признателен за любую помощь, которая может быть предложена, и я готов предоставить больше информации, если это необходимо. Я мог бы даже предоставить другие классы игры, но там очень долго и грязно, и я бы предпочел не делать этого без необходимости.

Апплетную версию игры можно найти здесь, на gamejolt.com , если вы хотите протестировать ее. Если у вас есть компьютер, он должен работать нормально, а с Mac - нет.

** редактировать ** Здесь вы можете скачать .jar файл всех классов и ресурсов. Не стесняйтесь использовать файлы для самостоятельного тестирования вашего решения, если хотите ... В противном случае у меня будет доступ к компьютеру Mac во вторник, и тогда я протестирую все решения.

http://dl.dropbox.com/u/18832480/Rocks_Source_file.jar

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Это всего лишь SWAG, но поскольку проблемы с многопоточностью в Swing часто могут привести к пагубным, непредсказуемым и трудно обнаруживаемым ошибкам, что, если вы создадите свой апплет поточно-ориентированным способом?т.е.

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

private void createGUI() {
   Board b;
   b = new Board();
   getContentPane().add(b);
   b.focus()
}
1 голос
/ 16 января 2011

JApplet крадет фокус у Board. Чтобы предотвратить это, добавьте следующее в конец вашего init() метода:

setFocusable(false);
...