标签: java-7

安装 JDK 和使用转储之间的区别

所有,我想知道使用Oracle提供的安装程序安装JDK和使用安装后创建的JDK目录有什么区别。

假设我在机器 M1 上使用 oracle 的安装程序安装了 JDK7u1,位置为:C:\Program Files\Java\JDK7u1

我可以将 JDK7u1 目录(包括它的所有子目录)复制到另一台机器 M2 中的文件夹中

“D:\JVMs”所以目录看起来像:“D:\JVMs\JDK7u1”。如果我将 JAVA_HOME 设置为“D:\JVMs\JDK7u1”并将“D:\JVMs\JDK7u1\bin”添加到路径变量。

有什么不同吗?

如果它们没有不同,为什么 Oracle 的 Windows 发行版不附带 .zip 发行版?

另外,如果我已经在我的机器上安装了 JDK6u23,安装 jdk7 安装程序会导致任何问题吗?

我的系统信息:Windows XP SP3 32 位机。

谢谢

java java-7

4
推荐指数
1
解决办法
1972
查看次数

使用 Java 7 使用 Files 写入不存在的文件

嗨,我尝试写入不存在的文件

public static void main(String[] args) throws IOException {
        Path newFile = Paths.get("output.txt");
        Files.write(newFile, "Sample text".getBytes());
}
Run Code Online (Sandbox Code Playgroud)

一切都好,但如果我把选项

Files.write(newFile, "Sample text".getBytes(),StandardOpenOption.DELETE_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)

出现错误

Exception in thread "main" java.nio.file.NoSuchFileException: problem.txt
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

所以为了工作,我必须添加选项

StandardOpenOption.CREATE_NEW
Run Code Online (Sandbox Code Playgroud)

为什么在第二次尝试StandardOpenOption.DELETE_ON_CLOSE中不起作用,但第一次没有任何选项可以工作并创建文件?

我正在使用 java 版本(构建 1.7.0_45-b18)

java file path java-7

4
推荐指数
1
解决办法
1782
查看次数

如何在 switch case 中使用枚举类

出现错误 - case 表达式必须是常量表达式当我尝试在 switch case 语句中使用 enum 类时,:

我的枚举类是,

public enum TestEnumClass {

    TEST1("TEST1"),
    TEST2("TEST2"),
    TEST3("TEST3");

    private String enumConstant;

    private TestEnumClass(String algoConstant) {
        this.enumConstant = algoConstant;
    }

    public String getEnumConstant() {
        return enumConstant;
    } 
}
Run Code Online (Sandbox Code Playgroud)

我试图在另一个类文件中使用 enum TestEnumClass 如下,

public class TestIndexOf {

    public static void main(String[] args) {


        String str = args[0];

        switch(str){

        case TestEnumClass.Test1.getEnumConstant() : System.out.println("test1"); break;

        case TestEnumClass.Test2.getEnumConstant() : System.out.println("test2"); break;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它给了我编译时错误:

case 表达式必须是常量表达式

请建议我,我哪里出错了。

java enums compiler-errors switch-statement java-7

4
推荐指数
1
解决办法
4611
查看次数

为什么我不能调用添加到Java中的匿名类的方法?

如果匿名类正在扩展/实现类/接口,为什么我不能添加新方法?

换句话说,这有效:

class A {
    void a() {
        System.out.println("a in A");
    }
}

class B extends A {
    @Override
    void a() {
        System.out.println("a in B");
    }
    void b() {
        System.out.println("b in B");
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用:

class C {
    A anonA() {
        return new A() {
            void b() {
                System.out.println("b in C");
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于:

public static void main(String[] args) {
    B b = new B();
    b.b();

    // C c = new C();
    // A anonA = c.anonA();
    // …
Run Code Online (Sandbox Code Playgroud)

java anonymous-class java-7

4
推荐指数
1
解决办法
246
查看次数

返回泛型类型的交集

我想让一个函数返回一个保证实现两个接口的对象。在编译时不一定知道确切的对象。我的代码看起来像:

class HelloWorld {

  public interface A {}
  public interface B {}

  public static class C implements A, B {}
  public static class D implements A, B {}

  public static <T extends A & B> void g(T t) {}

  public static <T extends A & B> T f(boolean b) {
    if (b)
      return new C(); // Doesn't compile
    return new D(); // Doesn't compile
  }

  public static void main(String []args){
    g(f(true));
    g(f(false));
    <what_should_I_write_here> x = f(<user_inputted_boolean>); 
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试编译时出现以下错误:

HelloWorld.java:13: …

java generics java-7

4
推荐指数
1
解决办法
1143
查看次数

无法加载"com.google.gson.JsonObject"类

我想在我的Android Studio项目中包含firebase SDK.但它给了我一个错误.我使用的是最新的JDK版本(1.7.0_71),它要求将更高版本升级到(1.7.0_67).

我需要帮助android上的基本firebase设置SDK.我尝试通过以下链接参考设置它:https://firebase.google.com/docs/android/setup#add_the_sdk.

我收到以下错误:请检查附加的屏幕截图

截图

java android java-7 firebase

4
推荐指数
1
解决办法
2993
查看次数

如何在 Java7 中为 Axis1 webservice 客户端启用 TLS1.1

总结:Salesforce.com 最近为其沙盒实例 (test.salesforce.com) 禁用了 TLSv1,并且只能支持 TLSv1.1 及更高版本的 API 集成,用于入站和出站请求。

我使用 Java Axis1.0 客户端代码和 JDK 7.0 连接(通过 webservice soap)到 salesforce.com。我收到异常“UNSUPPORTED_CLIENT:TLS 1.0 已在该组织中禁用。使用 https 连接到 Salesforce 时,请使用 TLS 1.1 或更高版本。” With Java7.0 Supported Protocols:SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2 Enabled Protocols: TLSv1

`使用Java8.0,当我尝试使用java8 客户端连接到salesforce.com 时,连接成功。

支持的协议:SSLv2Hello、SSLv3、TLSv1、TLSv1.1、TLSv1.2 启用协议:TLSv1、TLSv1.1、TLSv1.2`

我必须使用 Java 7,因为我们的应用程序正在使用它。我尝试设置虚拟机参数: -Dhttps.protocols=TLSv1.1,TLSv1.2 -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -Ddeployment.security.TLSv1.1 =true -Ddeployment.security.TLSv1.2=true”但没有成功。

你能帮我找出 Java7 中的设置来启用 TLSv1.1 吗?

salesforce java-7 salesforce-communities

4
推荐指数
1
解决办法
3409
查看次数

ArrayList 的 isEmpty() 方法上的 ConcurrentModificationException

我有以下代码:

Map<String, List<String>> map;
for(String k : map.keySet()){
   List<String> list = map.get(k);
   boolean empty = list.isEmpty();//CME
   if(!empty && somecheck(k, ...)){
      list.clear();
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在ConcurrentModificationException使用 isEmpty() 方法。列表是一个ArrayList. 没有其他线程修改列表,因为它之前是在此方法中创建的(以及所有映射)。唯一修改列表的地方是clear(),但它在 isEmpty() 之后调用并且循环不能在一个列表上执行两次。

我正在使用 Java 1.7

java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)
    at java.util.ArrayList$SubList.size(ArrayList.java:998)
    at java.util.AbstractCollection.isEmpty(AbstractCollection.java:86)
Run Code Online (Sandbox Code Playgroud)

java arraylist concurrentmodification java-7

4
推荐指数
1
解决办法
601
查看次数

Calendar.get(Calendar.DAY_OF_MONTH) 返回错误的一天

当我运行以下代码时:

int year = 2017;
int month = 7;
int dayOfMonth = 10;

Calendar dateOfBirth = new GregorianCalendar(year, month, dayOfMonth);
dateOfBirth.getTime(); // See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490
dateOfBirth.setTimeZone(TimeZone.getTimeZone("UTC"));

System.out.println("Original Day Of Month:\t\t" + dayOfMonth);
System.out.println("Calendar:\t\t\t" + dateOfBirth);
System.out.println("Calendar substring:\t\t" + dateOfBirth.toString().substring(dateOfBirth.toString().indexOf("DAY_OF_MONTH"), dateOfBirth.toString().indexOf("DAY_OF_MONTH") + 15));
System.out.println("Formatted date:\t\t\t" + new SimpleDateFormat("dd").format(dateOfBirth.getTime()));
System.out.println("get(Calendar.DAY_OF_MONTH):\t" + dateOfBirth.get(Calendar.DAY_OF_MONTH));
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Original Day Of Month:      10
Calendar:                   java.util.GregorianCalendar[time=1502312400000,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=7,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=10,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
Calendar substring:         DAY_OF_MONTH=10
Formatted date:             10
get(Calendar.DAY_OF_MONTH): 9
Run Code Online (Sandbox Code Playgroud)

可以看到,返回的值dateOfBirth.get(Calendar.DAY_OF_MONTH)是不正确的。

我使用 UTC 是因为它是出生日期,我不希望它依赖于特定的时区。为了正确执行此操作,我需要调用dateOfBirth.getTime()- 参见http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490。如果我拨打那个电话,这可以正常工作,但随后我会遇到其他错误。

知道我能做些什么来准确地获得一个月中的正确日期吗?

我使用的是 Java v1.7.0_79,如果有问题,我目前使用 …

java calendar java-7

4
推荐指数
1
解决办法
5597
查看次数

如何在 java 8 或更高版本编译的 java 7 上运行 Jar

我使用 java 8 创建了一个 Windows 应用程序。但是我的客户在他的机器上使用 java 7 并且无法在机器上升级 java。

因此,当我在 java 8 中编译的 java7 上运行 jar 时,它会出错,所以我可以将 jar 兼容转换为较低版本的 java

java jar java-7 java-8

4
推荐指数
2
解决办法
4294
查看次数