2015-09-19 3 views
-1
public class myapp extends Frame { 

    public static void main(String args[]) { 
     myapp mdi = new myapp(); 
    } 

    static void Fatal(String s) { 
     MessageBox mb = new MessageBox("JMF Error", s); 
    } 

    JMFrame jmframe = null; 
    JDesktopPane desktop; 
    FileDialog fd = null; 
    CheckboxMenuItem AutoLoop = null; 
    Player player = null; 
    Player newPlayer = null; 
    String filename; 

    public myapp() { 
     super("Java Media Player"); 

     // Add the desktop pane 
     setLayout(new BorderLayout()); 
     desktop = new JDesktopPane(); 
     desktop.setDoubleBuffered(true); 
     add("Center", desktop); 
     setMenuBar(createMenuBar()); 

     setSize(640, 480); 
     setVisible(true); 

     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent we) { 
       System.exit(0); 
      } 
     }); 

    } 

    private MenuBar createMenuBar() { 
     ActionListener al = new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       String command = ae.getActionCommand(); 
       if (command.equals("Open")) { 
        if (fd == null) { 
         fd = new FileDialog(myapp.this, "Open File", 
           FileDialog.LOAD); 
        } 
        fd.show(); 
        if (fd.getFile() != null) { 
         String filename = fd.getDirectory() + fd.getFile(); 
         openFile("file:" + filename); 
        } 
       } else if (command.equals("Exit")) { 
        dispose(); 
        System.exit(0); 
       } 
      } 
     }; 

     MenuItem item; 
     MenuBar mb = new MenuBar(); 

     Menu mnFile = new Menu("File"); 
     item = new MenuItem("Open"); 
     mnFile.add(item); 
     item.addActionListener(al); 
     mnFile.add(item = new MenuItem("Exit")); 
     item.addActionListener(al); 

     // Options Menu 
     Menu mnOptions = new Menu("Options"); 
     AutoLoop = new CheckboxMenuItem("Auto replay"); 
     AutoLoop.setState(true); 
     mnOptions.add(AutoLoop); 

     Menu mn = new Menu("Help"); 
     MenuItem ball = new MenuItem("Build"); 
     ball.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(myapp.this, 
         "DEVELOPED BY DVM XLADOR"); 
      } 
     }); 
     mn.add(ball); 
     mb.add(mn); 
     mb.add(mnFile); 
     mb.add(mnOptions); 
     mb.add(mn); 
     return mb; 
    } 

    /** 
    * Open a media file. 
    */ 
    public void openFile(String filename) { 
     String mediaFile = filename; 
     Player player = null; 
     // URL for our media file 
     URL url = null; 
     try { 
      // Create an url from the file name and the url to the 
      // document containing this applet. 
      if ((url = new URL(mediaFile)) == null) { 
       Fatal("Can't build URL for " + mediaFile); 
       return; 
      } 

      // Create an instance of a player for this media 
      try { 
       player = Manager.createPlayer(url); 
      } catch (NoPlayerException e) { 
       Fatal("Error: " + e); 
      } 
     } catch (MalformedURLException e) { 
      Fatal("Error:" + e); 
     } catch (IOException e) { 
      Fatal("Error:" + e); 
     } 
     if (player != null) { 
      this.filename = filename; 
      JMFrame jmframe = new JMFrame(player, filename); 
      desktop.add(jmframe); 
     } 
    } 
} 

class JMFrame extends JInternalFrame implements ControllerListener { 
    Player mplayer; 
    Component visual = null; 
    Component control = null; 
    int videoWidth = 0; 
    int videoHeight = 0; 
    int controlHeight = 30; 
    int insetWidth = 10; 
    int insetHeight = 30; 
    boolean firstTime = true; 

    public JMFrame(Player player, String title) { 
     super(title, true, true, true, true); 
     getContentPane().setLayout(new BorderLayout()); 
     setSize(320, 10); 
     setLocation(50, 50); 
     setVisible(true); 
     mplayer = player; 
     mplayer.addControllerListener((ControllerListener) this); 
     mplayer.realize(); 
     addInternalFrameListener(new InternalFrameAdapter() { 
      public void internalFrameClosing(InternalFrameEvent ife) { 
       mplayer.close(); 
      } 
     }); 

    } 

    public void controllerUpdate(ControllerEvent ce) { 
     if (ce instanceof RealizeCompleteEvent) { 
      mplayer.prefetch(); 
     } else if (ce instanceof PrefetchCompleteEvent) { 
      if (visual != null) 
       return; 

      if ((visual = mplayer.getVisualComponent()) != null) { 
       Dimension size = visual.getPreferredSize(); 
       videoWidth = size.width; 
       videoHeight = size.height; 
       getContentPane().add("Center", visual); 
      } else 
       videoWidth = 320; 
      if ((control = mplayer.getControlPanelComponent()) != null) { 
       controlHeight = control.getPreferredSize().height; 
       getContentPane().add("South", control); 
      } 
      setSize(videoWidth + insetWidth, videoHeight + controlHeight 
        + insetHeight); 
      validate(); 
      mplayer.start(); 
     } else if (ce instanceof EndOfMediaEvent) { 
      mplayer.setMediaTime(new Time(0)); 
      mplayer.start(); 
     } 
    } 
} 

JAR-файл Основной класс не найден и java.io.FileNotFoundException

D:\hadoop>jar cvf db.jar *.class 
      added manifest 
      adding: JMFrame$1.class(in = 600) (out= 377)(deflated 37%) 
     adding: JMFrame.class(in = 2362) (out= 1329)(deflated 43%) 
      adding: myapp$1.class(in = 469) (out= 334)(deflated 28%) 
      adding: myapp$2.class(in = 1330) (out= 807)(deflated 39%) 
      adding: myapp$3.class(in = 631) (out= 436)(deflated 30%) 
     adding: myapp.class(in = 3283) (out= 1787)(deflated 45%) 

D:\hadoop>java -jar db.jar 
    no main manifest attribute, in db.jar 

я могу скомпилировать мой файл без каких-либо проблем, но когда дело доходит до создания JAR-файла он уведомляет меня ошибку java.io.FileNotFoundException jni error, пожалуйста, проверьте свою установку, а также файл manife.st. Просто исправьте мой сегмент кода, где я ошибся

+1

Поверните заглушки, выкрикивайте. Потеряйте эти уродливые комментарии блоков, которые не добавляют никакой ценности или информации. Изучите стандарты кодирования Java и что-то о правильном форматировании для удобства чтения. – duffymo

+2

Кроме того, пожалуйста, покажите полную трассировку стека и попытайтесь уменьшить проблему до * короткой *, но полной программы, демонстрирующей проблему. –

+0

это не показывает мне никакого основного атрибута манифеста в командной строке, где я использую команду cvf –

ответ

0

Как вы пытаетесь построить свой JAR? Проблема состоит в том, что это пытается создать исполняемый JAR, который будет запущен, вызвав метод main в классе Main (это обычный по умолчанию), но поскольку у вас нет класса Main, он не может этого сделать.

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

+0

поэтому я должен использовать основной класс, и от него я должен сделать конструктор для вызова класса myapp и перекомпилировать программу, используя основной класс am i done? –

+0

Я в замешательстве, редактирование, которое вы указали для включения ошибки при выполнении JAR, отличается от ранее обнаруженного FileNotFoundException? Я могу рассказать вам, что происходит с командой 'jar', но это совсем другая ошибка. – hugh

+0

зависит от usae команды cvf и cfe i m получает там две ошибки: –

0

(Проводка в качестве отдельного ответа, потому что редактирование вопроса показывает совершенно другой вопрос)

Проблемы вы испытываете запуск баночки, что JAR не определяет точку входа, поэтому jar команда не может ее выполнить. Поскольку вы не включаете манифест при создании своего JAR, jar автоматически генерирует пустой для вас.

Чтобы это исправить, изменить JAR-строительный команду:

jar cvfe db.jar myapp *.class 

Тогда вы будете в состоянии выполнить это, как вы были. (Обратите внимание, что myapp - это полное имя класса. Поскольку вы не указали объявление package, я предположил, что вы используете пакет по умолчанию. Если нет, обязательно включите его здесь). Вы также обнаружите, что если вы распаковать его и заглянуть внутрь META-INF/MANIFEST.MF есть теперь линия:

Main-Class: myapp 

Подробнее об этом here.

Смежные вопросы