编译JAVA程序成功但运行javac命令时出现错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译JAVA程序成功但运行javac命令时出现错误相关的知识,希望对你有一定的参考价值。

因该是你的写法有问题。具体流程如下

1、 新建txt文档并将后缀改成.java

确保文件名称的后缀真实是.java 结尾而不是.java.txt ( 可在电脑设置中显示扩展名)
‍

2、在心间文件中编写测试代码既main方法代码如下

public class Test 
    public static void main(String[] args) 
          System.out.println("hello word");
    

‍

3、编辑Test.java  文件

首先在cmd(win 电脑)或终端(苹果电脑)  下打开Test.java所在目录(win电脑)

并输入 javac Test.java    点击回车

完成后就会发现在同级目录下多了一个 Test.class   的文件

5、在cmd 或终端下输入 java Test  后回车 即可运行改class文件

说明:

此处强调说明两个命令 javac 和java

javac 是编译命令既 将java文件编译成可执行的class文件

而java 是执行命令 既执行class文件

其中 javac 后边必须写java文件的全名 例如  Test.java

java 后边则是Test 没有后缀这一点需要注意

参考技术A

编译JAVA程序成功证明没有语法上的错误,而运行javac命令时出现错误,也说明了是执行的代码抛出了运行时异常。

运行时异常有:NullPointerException, IndexOutOfBoundsException,  NoSuchElementException,ArrayIndexOutOfBoundsException,ClassCastException,NumberFormatException,··· ···

例如:

public class E

public static void main(String[] args)

String s="fl";

int a=Integer.parseInt(s);

System.out.print(a);

这段代码能通过编译,但运行的时候会报出NumberFormatException异常:

参考技术B 你得把错误贴出来啊 参考技术C 你没发现void写错吗?本回答被提问者采纳

创建 GCM 演示应用程序时出现 Javac 错误(Google App Engine Java/Windows 7)

【中文标题】创建 GCM 演示应用程序时出现 Javac 错误(Google App Engine Java/Windows 7)【英文标题】:Javac error when creating GCM demo app (Google App Engine Java/Windows 7) 【发布时间】:2013-05-29 13:21:06 【问题描述】:

我正在尝试按照“官方”教程 (http://developer.android.com/google/gcm/demo.html) 在 Windows 7 上创建适用于 Android 的 GCM 演示应用程序。

特别是,我正在尝试按照上述教程中的说明使用 Java App Engine 创建服务器:

使用标准 App Engine for Java 设置服务器:

    从 SDK 管理器中,安装 Extras > Google Cloud Messaging for Android Library。这会在下面创建一个 gcm 目录 YOUR_SDK_ROOT/extras/google/ 包含这些子目录: gcm-client, gcm-server, samples/gcm-demo-client, samples/gcm-demo-server 和 samples/gcm-demo-appengine。

    在文本编辑器中,编辑 samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/ApiKeyInitializer.java 并将现有文本替换为上面获得的 API 密钥。

    注意:在该类中设置的 API 键值仅用于在 App Engine 上创建持久实体一次。如果您部署 应用程序,您可以使用 App Engine 的 Datastore Viewer 来更改它 稍后。

    在 shell 窗口中,转到 samples/gcm-demo-appengine 目录。

    通过 ant runserver 启动开发 App Engine 服务器,使用 -Dsdk.dir 指示 App Engine SDK 的位置,使用 -Dserver.host 设置服务器的主机名或 IP 地址:

    $ ant -Dsdk.dir=/opt/google/appengine-java-sdk runserver -Dserver.host=192.168.1.10 构建文件:gcm-demo-appengine/build.xml

我已按照这些步骤操作,但出现以下错误:

C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine>ant -Dsdk.dir C:/Users/p/appengine-java-sdk-1.8.0 runserver -Dserver.host=192.168.44.1 Buildfile: gcm-demo-appengine/build.xml
Buildfile: C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\build.xml

init:

copyjars:

compile:
    [javac] Compiling 8 source files to C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\WebContent\WEB-INF\classes
    [javac] C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\src\com\google\android\gcm\demo\serer\ApiKeyInitializer.java:1: reached end of file while parsing
    [javac] AIzbSyBQdFestseFygh7Q22dxEfdsyc_k->
    [javac] ^
    [javac] 1 error

BUILD FAILED

解析时到达文件末尾” - 据我了解,此错误通常是由缺少括号引起的 - 但是,我所做的只是在记事本中编辑 ApiKeyInitializer.java 文件以输入 API 密钥;我没有碰任何代码!我已经尝试在网上找到解决方案,但无济于事。

有谁知道可能导致此问题的原因以及我该如何解决?非常感谢!

【问题讨论】:

请附上ApiKeyInitializer.java的代码。您在输入 API 密钥时一定做错了什么。 嗨,Eran,非常感谢您的回复。文件 ApiKeyInitializer.java 不包含任何代码 - 它实际上只包含密钥(参见教程中引用的文本中的 (2)) - 这正是让我感到困惑的地方...... 如果它只包含密钥,它不是一个有效的java文件,你不应该尝试编译它(它不应该使用.java后缀)。 谢谢,Eran,你写的很有意义。问题是我不知道如何更改后缀 - 我只是按照 Android 开发人员教程中建议的步骤进行操作。我开始怀疑是否有人让这个教程工作?!? 在下面查看我的答案。 ApiKeyInitializer.java 似乎是一个有效的 java 文件。也许你以某种方式删除了它的内容。 【参考方案1】:

我检查了 ApiKeyInitializer.java 文件(我在本地计算机上拥有它)。 它看起来像一个有效的 java 类:

/*
 * Copyright 2012 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.google.android.gcm.demo.server;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;

import java.util.logging.Logger;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * Context initializer that loads the API key from the App Engine datastore.
 */
public class ApiKeyInitializer implements ServletContextListener 

  static final String ATTRIBUTE_ACCESS_KEY = "apiKey";

  private static final String ENTITY_KIND = "Settings";
  private static final String ENTITY_KEY = "MyKey";
  private static final String ACCESS_KEY_FIELD = "ApiKey";

  private final Logger logger = Logger.getLogger(getClass().getName());

  public void contextInitialized(ServletContextEvent event) 
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Key key = KeyFactory.createKey(ENTITY_KIND, ENTITY_KEY);

    Entity entity;
    try 
      entity = datastore.get(key);
     catch (EntityNotFoundException e) 
      entity = new Entity(key);
      // NOTE: it's not possible to change entities in the local server, so
      // it will be necessary to hardcode the API key below if you are running
      // it locally.
      entity.setProperty(ACCESS_KEY_FIELD,
          "replace_this_text_by_your_Simple_API_Access_key");
      datastore.put(entity);
      logger.severe("Created fake key. Please go to App Engine admin "
          + "console, change its value to your API Key (the entity "
          + "type is '" + ENTITY_KIND + "' and its field to be changed is '"
          + ACCESS_KEY_FIELD + "'), then restart the server!");
    
    String accessKey = (String) entity.getProperty(ACCESS_KEY_FIELD);
    event.getServletContext().setAttribute(ATTRIBUTE_ACCESS_KEY, accessKey);
  

  public void contextDestroyed(ServletContextEvent event) 
  


也许您以某种方式删除了该文件的内容。

【讨论】:

太棒了,谢谢!现在似乎可以编译了,并通知我“Dev App Server 正在运行”。我很惊讶我不必在某处输入 API 密钥?!? 我认为你应该在上面写着的地方输入你的 API 密钥:"replace_this_text_by_your_Simple_API_Access_key" 当然!我忽略了这一点,我太傻了。非常感谢您的时间和耐心!

以上是关于编译JAVA程序成功但运行javac命令时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

构建成功,但尝试运行程序时出现 GLEW 错误

VSCode 编译时出现错误 找不到 preLaunchTask“g++” 怎么办?

用命令行编译Java时遇到如下错误提示(该错误是在Class文件生成后,执行java命令时出现的)

Java入门常见错误总结

创建 GCM 演示应用程序时出现 Javac 错误(Google App Engine Java/Windows 7)

jdk编译java文件时出现:编码GBK的不可映射字符