Jar文件不会双击运行

问题描述:

我无法运行我的.jar文件。我已经阅读了许多类似的线程,但仍然无法正常工作。如果我从包含该文件的文件夹运行“java -jar jar_name.jar”,我可以从cmd行运行它。我运行了应该修复文件关联的Jarfix程序,但它仍然不起作用。当我从Eclipse中导出时,它会告诉我Jar文件不会双击运行

JAR导出已完成警告。查看详情了解更多信息....与编译警告导出:关机/ src目录/ Shutdown.java

从我读过的东西,这不是一个真正的问题,它只是意味着有在你的程序的警告。我认为代码没有任何问题,但它是一个小程序,所以我反正包含了它。任何帮助表示赞赏。

import java.io.IOException; 
import java.util.Scanner; 

public class Shutdown { 

    public static void main(String[] args) throws IOException 
    { 
     String os; 
     String Win = "Windows"; 
     String choice; 

     os = System.getProperty("os.name"); 

     if(os.contains(Win)) 
     { 
      System.out.println("Congratulations, you are running "+ os + ".\nYou now have three options."); 
      do 
      { 
       PrintMenu(); 
       Scanner keyboard = new Scanner(System.in); 
       choice = keyboard.next(); 
       ReturnMenu(choice);//passes user input as argument to method 
      } 
      while(choice !="1" || choice != "2" || choice !="3"); 

     } 

     else 
      System.out.println("You Are Using A Non-Windows System. Please upgrade."); 

    } 

    public static void shutdown() throws IOException 
    { 
     Runtime run = Runtime.getRuntime(); 
     Process proc = run.exec("shutdown -s -t 0"); 
    } 

    public static void restart() throws IOException 
    { 
     Runtime run = Runtime.getRuntime(); 
     Process proc = run.exec("shutdown -r -t 0"); 
    } 

    public static void logoff() throws IOException 
    { 
     Runtime run = Runtime.getRuntime(); 
     Process proc = run.exec("shutdown -l"); 
    } 

    public static void PrintMenu() 
    { 
     System.out.println("Please make a selection:" 
        + "\n1 - Shut down\n2 - Restart\n3 - Log Off\n"); 

    } 

    public static void ReturnMenu(String in) throws IOException, NumberFormatException 
    { 
     int x; 

     try 
      { 
      x = Integer.parseInt(in);//cast user input to int to be used in switch statement 
      } 
     catch (NumberFormatException e)//catches non-number input that can't be case to int 
      { 
      x=4;//caught exception sets x to 4 to cause loop to keep running 
      } 

     switch (x) 
     { 
     case 1: 
      shutdown(); 
      break; 
     case 2: 
      restart(); 
      break; 
     case 3: 
      logoff(); 
      break; 
     default: 
      System.out.println("Invalid menu selection. Please try again."); 
     } 

    } 
} 
+0

确定jar没有运行吗?可能是因为控制台没有显示,您只是没有看到任何输出。您可能想使用'JOptionPane.showMessageDialog(..)'来查看一些简单的输出来测试它。 – Dawnkeeper 2015-02-07 23:47:26

+0

双击它设置为使用Java运行它?换句话说,它打开了什么? – Kyranstar 2015-02-08 01:18:44

+0

如果你想通过双击运行它,在eclipse中将项目导出为可执行jar – Arkantos 2015-02-08 04:42:20

Select your File/Project -- Export -- Runnable JAR -- Select class with main() in 
Launch Configuration -- destination 
  • 如果你想为你在生成JAR类的依赖,选择 第一种选择(提取所需的库到生成JAR)
  • 如果您不需要它们只是你的代码选择第三选项(复制 需要的库文件到子文件夹旁边的生成JAR)

希望这有助于:)

在Windows上,标准Java安装将双击.jar文件与javaw.exe程序关联,而不是java.exe。不同之处在于javaw.exe没有控制台(命令窗口)。

由于您没有控制台,因此您没有System.in。我没有机会尝试它,但我的猜测是试图从System.in读取将导致立即到达流的末尾,这将导致Scanner的next *方法抛出NoSuchElementException。

我总结,你不能使用System.in。如果要提示用户输入,请使用Swing或JavaFX。

附加说明:不能使用Java中的==!=来比较字符串,因为这些运算符会比较对象引用而不是比较字符串值。改用equals方法。例如:

while (!choice.equals("1") && !choice.equals("2") && !choice.equals("3"))