小编hac*_*tsu的帖子

我们应该在观察者模式中使用 Wea​​kReference 吗?

我正在学习并尝试从本教程中用Java 实现观察者模式。我被困在我是否应该使用WeakReference主题来容纳观察者的问题上。

对于下面的实现, theSubject和 theBinaryObserver相互持有强引用,我担心这会阻止 GC 收集未使用的Subject.

所以我的问题是,我应该使用List<WeakReference<Observer>> observers而不是List<Observer> observers吗?

主题.java

public class Subject {

   private List<Observer> observers = new ArrayList<Observer>();
   private int state;

   public int getState() {
      return state;
   }

   public void setState(int state) {
      this.state = state;
      notifyAllObservers();
   }

   public void attach(Observer observer){
       observers.add(observer);
   }

   public void notifyAllObservers(){
       for (Observer observer : observers) {
           observer.update();
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

观察者.java

public abstract class Observer { …
Run Code Online (Sandbox Code Playgroud)

java design-patterns

5
推荐指数
1
解决办法
1429
查看次数

Vue.js 绑定到名称中带有点的 DOM 自定义事件(如引导事件)

使用 Vue 2.1.10

我可以使用v-on指令绑定到 DOM 事件。例如:

v-on:click
Run Code Online (Sandbox Code Playgroud)

要绑定到 DOM 单击。但是我不知道如何绑定到名称中带有点的事件。例如引导程序中的“show.bs.modal”。

目前,我在created带有常规 DOM 方法的钩子中使用了一种变通方法绑定,但我真的很想为此使用声明性语法。如何做到这一点?谢谢

编辑: 问题是关于允许的语法:我该如何做:

Vue.component('comp',{
  template:'<div v-on:show.bs.modal="sunrise"></div',
  methods:{
    sunrise:function(e){

     }

   }
})
Run Code Online (Sandbox Code Playgroud)

vue.js vuejs2

5
推荐指数
2
解决办法
2139
查看次数

在Electron中获取渲染器进程ID

在Electron中,渲染器进程的pid通过

processId = require('remote').getCurrentWindow().getProcessId()
Run Code Online (Sandbox Code Playgroud)

但是,它在最新版本(1.4.x,1.5.x,1.6.x)中不再有效。

还有其他方法来获取渲染器进程的pid,即Windows的pid吗?

javascript chromium node.js electron

5
推荐指数
1
解决办法
2056
查看次数

我应该在重用FileOutputStream时关闭流吗?

如标题中所述,我应该在重用FileOutputStream变量时关闭流吗?例如,在以下代码中,我应该在调用outfile.close()之前为其分配新文件,为什么?

谢谢:)

FileOutputStream outfile = null;
int index = 1;

while (true) {

    // check whether we should create a new file
    boolean createNewFile = shouldCreateNewFile();

    //write to a new file if pattern is identified
    if (createNewFile) {
        /* Should I close the outfile each time I create a new file?
        if (outfile != null) {
            outfile.close();
        }
        */
        outfile = new FileOutputStream(String.valueOf(index++) + ".txt");
    }

    if (outfile != null) {
        outfile.write(getNewFileContent());
    }

    if (shouldEnd()) {
        break;
    } …
Run Code Online (Sandbox Code Playgroud)

java fileoutputstream

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

在Xcode中复制文件完整路径

我正在使用Perforce来管理我们的代码库.在Perforce中,我们需要在编辑之前检出文件.当我在Xcode工作时,有时我想知道工作文件的完整路径,以便我可以在Perforce中查看它.

所以这是我的问题:

是否有快捷方式,插件或其他快速方法来复制Xcode中文件的完整路径?

我所知道的:

  1. 我可以Command+click在文件磁贴上显示完整路径,但我无法复制它.
  2. Visual Studio中,我们可以右键单击文件的选项卡并选择Copy Full Path实现此目的.
  3. Eclipse中,我们可以Alt/Option + Enter实现这一目标.

更新:

实际上我的问题是如何在Xcode中实现等效Copy Full Path功能.无论如何,将文件拖到终端也是一个非常好的解决方法.

xcode

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

带有Maven的com / fasterxml / jackson / databind / ObjectMapper的NoClassDefFoundError

这是一个与此处类似的问题,遗憾的是尚未解决。

如果您想调试代码,请参见GitHub repo

尽管我已将相关的依赖项添加到Mave中NoClassDefFoundErrorObjectMapper但得到了以下内容pom.xml

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
    at demo.DemoMain.main(DemoMain.java:10)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

这是源代码 DemoMain.java

package demo;

import com.fasterxml.jackson.databind.ObjectMapper;

public class DemoMain {
    public static void main(String[] args) {
        System.out.println("Start");
        ObjectMapper mapper = new ObjectMapper();
        System.out.println("End");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>Demo</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java jackson maven fasterxml

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

从ADB安装后,静态BroadcastReceiver无法正常工作

我正在开发一个需要通过adb广播自定义意图"com.example.demo.action.LAUNCH"来启动应用程序的项目.

我的计划是静态注册广播接收器"LaunchAppReceiver",它将在接收定制的意图时启动应用程序.

我通过调用安装了.apk

adb install -r <pakcageName>
Run Code Online (Sandbox Code Playgroud)

然后我通过打电话发送了意图

adb shell am broadcast -a com.example.demo.action.LAUNCH
Run Code Online (Sandbox Code Playgroud)

然而,意图发送后没有任何反应.似乎广播接收器根本没有收到意图.在收到意图之前,我是否需要以某种方式实例化接收器?

注意:由于Android设备是远程的,我必须使用adb来处理安装和启动.

谢谢!!


我宣布广播接收器如下

public class LaunchAppReceiver extends BroadcastReceiver{

    public LaunchAppReceiver () {}

    @Override
    public void onReceive(Context context, Intent intent) {

        Intent newIntent = new Intent(context, MainActivity.class);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(newIntent);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在AndroidManifest.xml中静态注册.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demo" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:enabled="true">
        <receiver
            android:name="com.example.demo.LaunchAppReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.demo.action.LAUNCH"/>
            </intent-filter>
        </receiver>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" /> …
Run Code Online (Sandbox Code Playgroud)

android adb broadcastreceiver android-intent

2
推荐指数
1
解决办法
3331
查看次数

如何配置 Powershell 控制台的编码?

我在 Powershell 控制台中显示中文字符时遇到了一些问题。所有中文都显示为矩形。我相信这是一个编码问题。有谁知道如何配置 Powershell 控制台以使用 UTF8 编码?

powershell

2
推荐指数
1
解决办法
5628
查看次数

将位数组转换为HBITMAP后,bmBits的NULL指针

我正在尝试将像素数组转换HBITMAP为本文中的指示: 如何将像素数组转换为HBITMAP.

基本上,数组被转换为a HBITMAP然后通过复制到剪贴板进行验证.但是,当BITMAP通过其bmBits成员从构造中访问位值时,它将返回NULL.

我可能在这里缺少一些东西.如果a HBITMAP成功创建,为什么我们仍然得到一个NULL指向其位值的指针?

uint8 width = 160;
uint8 height = 120;

uint8* pixels = new uint8[160 * 120 * 4];
for (int i = 0; i < 160 * 120 * 4; i++){
    pixels[i] = (i % 4 == 1) * 255; // testing pixels
}

BITMAPINFOHEADER bmih;
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = width;
bmih.biHeight = -1 * height;
bmih.biPlanes = 1;
bmih.biBitCount = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi gdi

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

"打开现有Android Studio项目"选项在新安装的Android Studio中不起作用

我想在新PC中的新安装的Android Studio中打开现有的Android Studio项目.但是,当我使用" 打开现有的Android Studio项目 "选项时,会弹出一个窗口,要求我设置Gradle home.

在此输入图像描述

这让我感到困惑,因为Android Studio应该使用gradle包装器来下载正确版本的Gradle.但是选项" 使用默认gradle包装器 "是不可选的.

我确信这个项目可以通过" 打开现有的Android Studio项目 " 在旧计算机上打开而不会出现问题.

我需要在这里手动下载Gradle吗?或者还有其他方法可以打开我的项目吗?

注意:我不是从Eclipse迁移到Android Studio.

谢谢!!

android gradle android-studio android-gradle-plugin

0
推荐指数
1
解决办法
4385
查看次数

关于OSX上的getenv()

我需要获取ANDROID_HOMEOSX上环境变量的值(在.bash_profile中设置)。我可以通过echo $ANDROID_HOME在终端中键入来验证其存在。

下面是代码:(Xcode项目)

void testGetEnv(const string envName) {

    char* pEnv;
    pEnv = getenv(envName.c_str());
    if (pEnv!=NULL) {
        cout<< "The " << envName << " is: " << pEnv << endl;
    } else {
        cout<< "The " << envName << " is NOT set."<< endl;
    }
}

int main() {
    testGetEnv("ANDROID_HOME");
}
Run Code Online (Sandbox Code Playgroud)

输出始终为The ANDROID_HOME is NOT set.。我认为我在getenv()这里使用不正确。要么,否则.bash_profilegetenv()调用时无效。

我想念什么?

c++ macos getenv

0
推荐指数
1
解决办法
1479
查看次数

在 Thrift IDL 中重命名字段是否安全?

如果客户端不再使用字段,则通过重命名来弃用 Thrift 中的字段是否安全?我的理解是,只要我们不更改类型,这应该有效。例如

struct FooResponse {
  1: optional i32 foo
}
Run Code Online (Sandbox Code Playgroud)

struct FooResponse {
  1: optional i32 fooDeprecated
}
Run Code Online (Sandbox Code Playgroud)

thrift thrift-protocol

0
推荐指数
1
解决办法
1938
查看次数